|
12 | 12 | //
|
13 | 13 | // RUN: %target-run-simple-swift(-parse-as-library)
|
14 | 14 | // REQUIRES: executable_test
|
15 |
| -// REQUIRES: PTRSIZE=64 |
16 | 15 | // REQUIRES: reflection
|
17 | 16 | // END.
|
18 | 17 | //
|
@@ -44,32 +43,40 @@ extension StaticBigIntTests {
|
44 | 43 |
|
45 | 44 | @available(SwiftStdlib 5.8, *)
|
46 | 45 | func testBinaryRepresentation() {
|
47 |
| - typealias Expected = (signum: Int, bitWidth: Int, words: [UInt]) |
48 |
| - let m = UInt(bitPattern: .min) |
| 46 | + typealias Expected = (signum: Int, bitWidth: Int, _32bit: [UInt], _64bit: [UInt]) |
| 47 | + let m = UInt(bitPattern: Int.min) |
49 | 48 | let keyValuePairs: KeyValuePairs<StaticBigInt, Expected> = [
|
50 |
| - -0x80000000000000000000000000000002: (-1, 129, [~1, ~m, ~0]), |
51 |
| - -0x80000000000000000000000000000001: (-1, 129, [~0, ~m, ~0]), |
52 |
| - -0x80000000000000000000000000000000: (-1, 128, [ 0, m, ~0]), |
53 |
| - -0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: (-1, 128, [ 1, m, ~0]), |
54 |
| - -0x4: (-1, 3, [~3, ~0, ~0]), |
55 |
| - -0x3: (-1, 3, [~2, ~0, ~0]), |
56 |
| - -0x2: (-1, 2, [~1, ~0, ~0]), |
57 |
| - -0x1: (-1, 1, [~0, ~0, ~0]), |
58 |
| - +0x0: ( 0, 1, [ 0, 0, 0]), |
59 |
| - +0x1: (+1, 2, [ 1, 0, 0]), |
60 |
| - +0x2: (+1, 3, [ 2, 0, 0]), |
61 |
| - +0x3: (+1, 3, [ 3, 0, 0]), |
62 |
| - +0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE: (+1, 128, [~1, ~m, 0]), |
63 |
| - +0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: (+1, 128, [~0, ~m, 0]), |
64 |
| - +0x80000000000000000000000000000000: (+1, 129, [ 0, m, 0]), |
65 |
| - +0x80000000000000000000000000000001: (+1, 129, [ 1, m, 0]), |
| 49 | + -0x80000000000000000000000000000002: (-1, 129, [~1, ~0, ~0, ~m, ~0], [~1, ~m, ~0]), |
| 50 | + -0x80000000000000000000000000000001: (-1, 129, [~0, ~0, ~0, ~m, ~0], [~0, ~m, ~0]), |
| 51 | + -0x80000000000000000000000000000000: (-1, 128, [ 0, 0, 0, m, ~0], [ 0, m, ~0]), |
| 52 | + -0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: (-1, 128, [ 1, 0, 0, m, ~0], [ 1, m, ~0]), |
| 53 | + -0x4: (-1, 3, [~3, ~0, ~0, ~0, ~0], [~3, ~0, ~0]), |
| 54 | + -0x3: (-1, 3, [~2, ~0, ~0, ~0, ~0], [~2, ~0, ~0]), |
| 55 | + -0x2: (-1, 2, [~1, ~0, ~0, ~0, ~0], [~1, ~0, ~0]), |
| 56 | + -0x1: (-1, 1, [~0, ~0, ~0, ~0, ~0], [~0, ~0, ~0]), |
| 57 | + +0x0: ( 0, 1, [ 0, 0, 0, 0, 0], [ 0, 0, 0]), |
| 58 | + +0x1: (+1, 2, [ 1, 0, 0, 0, 0], [ 1, 0, 0]), |
| 59 | + +0x2: (+1, 3, [ 2, 0, 0, 0, 0], [ 2, 0, 0]), |
| 60 | + +0x3: (+1, 3, [ 3, 0, 0, 0, 0], [ 3, 0, 0]), |
| 61 | + +0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE: (+1, 128, [~1, ~0, ~0, ~m, 0], [~1, ~m, 0]), |
| 62 | + +0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: (+1, 128, [~0, ~0, ~0, ~m, 0], [~0, ~m, 0]), |
| 63 | + +0x80000000000000000000000000000000: (+1, 129, [ 0, 0, 0, m, 0], [ 0, m, 0]), |
| 64 | + +0x80000000000000000000000000000001: (+1, 129, [ 1, 0, 0, m, 0], [ 1, m, 0]), |
66 | 65 | ]
|
67 | 66 | for (actual, expected) in keyValuePairs {
|
68 | 67 | expectEqual(expected.signum, actual.signum())
|
69 | 68 | expectEqual(expected.bitWidth, actual.bitWidth)
|
70 |
| - expectEqual(expected.words[0], actual[0]) |
71 |
| - expectEqual(expected.words[1], actual[1]) |
72 |
| - expectEqual(expected.words[2], actual[2]) |
| 69 | + if getInt(UInt.bitWidth) == 32 { |
| 70 | + expectEqual(expected._32bit[0], actual[0]) |
| 71 | + expectEqual(expected._32bit[1], actual[1]) |
| 72 | + expectEqual(expected._32bit[2], actual[2]) |
| 73 | + expectEqual(expected._32bit[3], actual[3]) |
| 74 | + expectEqual(expected._32bit[4], actual[4]) |
| 75 | + } else if getInt(UInt.bitWidth) == 64 { |
| 76 | + expectEqual(expected._64bit[0], actual[0]) |
| 77 | + expectEqual(expected._64bit[1], actual[1]) |
| 78 | + expectEqual(expected._64bit[2], actual[2]) |
| 79 | + } |
73 | 80 | }
|
74 | 81 | }
|
75 | 82 | }
|
@@ -141,24 +148,42 @@ extension StaticBigIntTests {
|
141 | 148 | @available(SwiftStdlib 5.8, *)
|
142 | 149 | func testWrapperAssociatedType() {
|
143 | 150 | do {
|
144 |
| - let negative = Wrapper(-0x0011223344556677_8899AABBCCDDEEFF) |
| 151 | + let negative = Wrapper(-0x00112233_44556677_8899AABB_CCDDEEFF) |
145 | 152 | expectEqual( -1, negative.actual.signum())
|
146 | 153 | expectEqual(118, negative.actual.bitWidth)
|
147 |
| - expectEqual(0x7766554433221101, negative.actual[0]) |
148 |
| - expectEqual(0xFFEEDDCCBBAA9988, negative.actual[1]) |
149 |
| - expectEqual(0xFFFFFFFFFFFFFFFF, negative.actual[2]) |
150 |
| - expectEqual(0xFFFFFFFFFFFFFFFF, negative.actual[.max]) |
| 154 | + if getInt(UInt.bitWidth) == 32 { |
| 155 | + expectEqual(0x33221101, negative.actual[0]) |
| 156 | + expectEqual(0x77665544, negative.actual[1]) |
| 157 | + expectEqual(0xBBAA9988, negative.actual[2]) |
| 158 | + expectEqual(0xFFEEDDCC, negative.actual[3]) |
| 159 | + expectEqual(0xFFFFFFFF, negative.actual[4]) |
| 160 | + expectEqual(0xFFFFFFFF, negative.actual[.max]) |
| 161 | + } else if getInt(UInt.bitWidth) == 64 { |
| 162 | + expectEqual(0x77665544_33221101, negative.actual[0]) |
| 163 | + expectEqual(0xFFEEDDCC_BBAA9988, negative.actual[1]) |
| 164 | + expectEqual(0xFFFFFFFF_FFFFFFFF, negative.actual[2]) |
| 165 | + expectEqual(0xFFFFFFFF_FFFFFFFF, negative.actual[.max]) |
| 166 | + } |
151 | 167 | }
|
152 | 168 | do {
|
153 |
| - let positive = Wrapper(0x0011223344556677_8899AABBCCDDEEFF) |
| 169 | + let positive = Wrapper(0x00112233_44556677_8899AABB_CCDDEEFF) |
154 | 170 | expectEqual( +1, positive.actual.signum())
|
155 | 171 | expectEqual(118, positive.actual.bitWidth)
|
156 |
| - expectEqual(0x8899AABBCCDDEEFF, positive.actual[0]) |
157 |
| - expectEqual(0x0011223344556677, positive.actual[1]) |
158 |
| - expectEqual(0x0000000000000000, positive.actual[2]) |
159 |
| - expectEqual(0x0000000000000000, positive.actual[.max]) |
| 172 | + if getInt(UInt.bitWidth) == 32 { |
| 173 | + expectEqual(0xCCDDEEFF, positive.actual[0]) |
| 174 | + expectEqual(0x8899AABB, positive.actual[1]) |
| 175 | + expectEqual(0x44556677, positive.actual[2]) |
| 176 | + expectEqual(0x00112233, positive.actual[3]) |
| 177 | + expectEqual(0x00000000, positive.actual[4]) |
| 178 | + expectEqual(0x00000000, positive.actual[.max]) |
| 179 | + } else if getInt(UInt.bitWidth) == 64 { |
| 180 | + expectEqual(0x8899AABB_CCDDEEFF, positive.actual[0]) |
| 181 | + expectEqual(0x00112233_44556677, positive.actual[1]) |
| 182 | + expectEqual(0x00000000_00000000, positive.actual[2]) |
| 183 | + expectEqual(0x00000000_00000000, positive.actual[.max]) |
| 184 | + } |
160 | 185 | }
|
161 |
| - do { |
| 186 | + if getInt(UInt.bitWidth) == 64 { |
162 | 187 | let fibonacciSequence = Wrapper(
|
163 | 188 | 0xA94FAD42221F2702_68A3DD8E61ECCFBD_40ABCFB3C0325745_27F80DDAA1BA7878_18B3C1D91E77DECD_0F444C01834299AB_096F75D79B354522_05D4D629E80D5489_039A9FADB327F099_023A367C34E563F0_016069317E428CA9_00D9CD4AB6A2D747_00869BE6C79FB562_00533163EF0321E5_00336A82D89C937D_001FC6E116668E68_0013A3A1C2360515_000C233F54308953_000780626E057BC2_0004A2DCE62B0D91_0002DD8587DA6E31_0001C5575E509F60_0001182E2989CED1_0000AD2934C6D08F_00006B04F4C2FE42_000042244003D24D_000028E0B4BF2BF5_000019438B44A658_00000F9D297A859D_000009A661CA20BB_000005F6C7B064E2_000003AF9A19BBD9_000002472D96A909_000001686C8312D0_000000DEC1139639_00000089AB6F7C97_0000005515A419A2_0000003495CB62F5_000000207FD8B6AD_0000001415F2AC48_0000000C69E60A65_00000007AC0CA1E3_00000004BDD96882_00000002EE333961_00000001CFA62F21_000000011E8D0A40_00000000B11924E1_000000006D73E55F_0000000043A53F82_0000000029CEA5DD_0000000019D699A5_000000000FF80C38_0000000009DE8D6D_0000000006197ECB_0000000003C50EA2_0000000002547029_0000000001709E79_0000000000E3D1B0_00000000008CCCC9_00000000005704E7_000000000035C7E2_0000000000213D05_0000000000148ADD_00000000000CB228_000000000007D8B5_000000000004D973_000000000002FF42_000000000001DA31_0000000000012511_000000000000B520_0000000000006FF1_000000000000452F_0000000000002AC2_0000000000001A6D_0000000000001055_0000000000000A18_000000000000063D_00000000000003DB_0000000000000262_0000000000000179_00000000000000E9_0000000000000090_0000000000000059_0000000000000037_0000000000000022_0000000000000015_000000000000000D_0000000000000008_0000000000000005_0000000000000003_0000000000000002_0000000000000001_0000000000000001_0000000000000000
|
164 | 189 | )
|
|
0 commit comments