12
12
//
13
13
// RUN: %target-run-simple-swift(-parse-as-library)
14
14
// REQUIRES: executable_test
15
+ // REQUIRES: PTRSIZE=64
15
16
// REQUIRES: reflection
16
17
// END.
17
18
//
@@ -35,9 +36,7 @@ final class StaticBigIntTests: Base {
35
36
let testCase = StaticBigIntTests ( )
36
37
let testSuite = TestSuite ( " StaticBigIntTests " )
37
38
testSuite. test ( " AssociatedType " , testCase. testAssociatedType)
38
- testSuite. test ( " SignumAndBitWidth " , testCase. testSignumAndBitWidth)
39
- testSuite. test ( " SubscriptAsUInt32 " , testCase. testSubscriptAsUInt32)
40
- testSuite. test ( " SubscriptAsUInt64 " , testCase. testSubscriptAsUInt64)
39
+ testSuite. test ( " BinaryRepresentation " , testCase. testBinaryRepresentation)
41
40
testSuite. test ( " TextualRepresentation " , testCase. testTextualRepresentation)
42
41
runAllTests ( )
43
42
#endif
@@ -78,24 +77,18 @@ extension StaticBigIntTests {
78
77
@available ( SwiftStdlib 5 . 8 , * )
79
78
func testAssociatedType( ) {
80
79
do {
81
- let wrapper : Wrapper = - 0x0123_4567_89AB_CDEF
82
- expectEqual ( - 1 , wrapper. actual. signum ( ) )
83
- expectEqual ( 58 , wrapper. actual. bitWidth)
84
- expectEqual ( 0x3211 , wrapper. actual [ 0 ] as UInt16 )
85
- expectEqual ( 0x7654 , wrapper. actual [ 1 ] as UInt16 )
86
- expectEqual ( 0xBA98 , wrapper. actual [ 2 ] as UInt16 )
87
- expectEqual ( 0xFEDC , wrapper. actual [ 3 ] as UInt16 )
88
- expectEqual ( 0xFFFF , wrapper. actual [ 4 ] as UInt16 )
80
+ let negative = Wrapper ( - 0x0123456789ABCDEF )
81
+ expectEqual ( - 1 , negative. actual. signum ( ) )
82
+ expectEqual ( 58 , negative. actual. bitWidth)
83
+ expectEqual ( 0xFEDCBA9876543211 , negative. actual [ 0 ] )
84
+ expectEqual ( 0xFFFFFFFFFFFFFFFF , negative. actual [ 1 ] )
89
85
}
90
86
do {
91
- let wrapper : Wrapper = 0x0123_4567_89AB_CDEF
92
- expectEqual ( + 1 , wrapper. actual. signum ( ) )
93
- expectEqual ( 58 , wrapper. actual. bitWidth)
94
- expectEqual ( 0xCDEF , wrapper. actual [ 0 ] as UInt16 )
95
- expectEqual ( 0x89AB , wrapper. actual [ 1 ] as UInt16 )
96
- expectEqual ( 0x4567 , wrapper. actual [ 2 ] as UInt16 )
97
- expectEqual ( 0x0123 , wrapper. actual [ 3 ] as UInt16 )
98
- expectEqual ( 0x0000 , wrapper. actual [ 4 ] as UInt16 )
87
+ let positive = Wrapper ( 0x0123456789ABCDEF )
88
+ expectEqual ( + 1 , positive. actual. signum ( ) )
89
+ expectEqual ( 58 , positive. actual. bitWidth)
90
+ expectEqual ( 0x0123456789ABCDEF , positive. actual [ 0 ] )
91
+ expectEqual ( 0x0000000000000000 , positive. actual [ 1 ] )
99
92
}
100
93
}
101
94
}
@@ -108,87 +101,33 @@ extension StaticBigIntTests {
108
101
extension StaticBigIntTests {
109
102
110
103
@available ( SwiftStdlib 5 . 8 , * )
111
- func testSignumAndBitWidth( ) {
112
- typealias Expected = ( signum: Int , bitWidth: Int )
104
+ func testBinaryRepresentation( ) {
105
+ typealias Expected = ( signum: Int , bitWidth: Int , words: [ UInt ] )
106
+ let m = UInt ( bitPattern: . min)
113
107
let keyValuePairs : KeyValuePairs < StaticBigInt , Expected > = [
114
- - 0x80000000000000000000000000000002 : ( signum : - 1 , bitWidth : 129 ) ,
115
- - 0x80000000000000000000000000000001 : ( signum : - 1 , bitWidth : 129 ) ,
116
- - 0x80000000000000000000000000000000 : ( signum : - 1 , bitWidth : 128 ) ,
117
- - 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : ( signum : - 1 , bitWidth : 128 ) ,
118
- - 0x4 : ( signum : - 1 , bitWidth : 3 ) ,
119
- - 0x3 : ( signum : - 1 , bitWidth : 3 ) ,
120
- - 0x2 : ( signum : - 1 , bitWidth : 2 ) ,
121
- - 0x1 : ( signum : - 1 , bitWidth : 1 ) ,
122
- + 0x0 : ( signum : 0 , bitWidth : 1 ) ,
123
- + 0x1 : ( signum : + 1 , bitWidth : 2 ) ,
124
- + 0x2 : ( signum : + 1 , bitWidth : 3 ) ,
125
- + 0x3 : ( signum : + 1 , bitWidth : 3 ) ,
126
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE : ( signum : + 1 , bitWidth : 128 ) ,
127
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : ( signum : + 1 , bitWidth : 128 ) ,
128
- + 0x80000000000000000000000000000000 : ( signum : + 1 , bitWidth : 129 ) ,
129
- + 0x80000000000000000000000000000001 : ( signum : + 1 , bitWidth : 129 ) ,
108
+ - 0x80000000000000000000000000000002 : ( - 1 , 129 , [ ~ 1 , ~ m , ~ 0 ] ) ,
109
+ - 0x80000000000000000000000000000001 : ( - 1 , 129 , [ ~ 0 , ~ m , ~ 0 ] ) ,
110
+ - 0x80000000000000000000000000000000 : ( - 1 , 128 , [ 0 , m , ~ 0 ] ) ,
111
+ - 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : ( - 1 , 128 , [ 1 , m , ~ 0 ] ) ,
112
+ - 0x4 : ( - 1 , 3 , [ ~ 3 , ~ 0 , ~ 0 ] ) ,
113
+ - 0x3 : ( - 1 , 3 , [ ~ 2 , ~ 0 , ~ 0 ] ) ,
114
+ - 0x2 : ( - 1 , 2 , [ ~ 1 , ~ 0 , ~ 0 ] ) ,
115
+ - 0x1 : ( - 1 , 1 , [ ~ 0 , ~ 0 , ~ 0 ] ) ,
116
+ + 0x0 : ( 0 , 1 , [ 0 , 0 , 0 ] ) ,
117
+ + 0x1 : ( + 1 , 2 , [ 1 , 0 , 0 ] ) ,
118
+ + 0x2 : ( + 1 , 3 , [ 2 , 0 , 0 ] ) ,
119
+ + 0x3 : ( + 1 , 3 , [ 3 , 0 , 0 ] ) ,
120
+ + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE : ( + 1 , 128 , [ ~ 1 , ~ m , 0 ] ) ,
121
+ + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : ( + 1 , 128 , [ ~ 0 , ~ m , 0 ] ) ,
122
+ + 0x80000000000000000000000000000000 : ( + 1 , 129 , [ 0 , m , 0 ] ) ,
123
+ + 0x80000000000000000000000000000001 : ( + 1 , 129 , [ 1 , m , 0 ] ) ,
130
124
]
131
125
for (actual, expected) in keyValuePairs {
132
126
expectEqual ( expected. signum, actual. signum ( ) )
133
127
expectEqual ( expected. bitWidth, actual. bitWidth)
134
- }
135
- }
136
-
137
- @available ( SwiftStdlib 5 . 8 , * )
138
- func testSubscriptAsUInt32( ) {
139
- let m = UInt32 ( bitPattern: . min)
140
- let keyValuePairs : KeyValuePairs < StaticBigInt , [ UInt32 ] > = [
141
- - 0x80000000000000000000000000000002 : [ ~ 1 , ~ 0 , ~ 0 , ~ m, ~ 0 ] ,
142
- - 0x80000000000000000000000000000001 : [ ~ 0 , ~ 0 , ~ 0 , ~ m, ~ 0 ] ,
143
- - 0x80000000000000000000000000000000 : [ 0 , 0 , 0 , m, ~ 0 ] ,
144
- - 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : [ 1 , 0 , 0 , m, ~ 0 ] ,
145
- - 0x4 : [ ~ 3 , ~ 0 , ~ 0 , ~ 0 , ~ 0 ] ,
146
- - 0x3 : [ ~ 2 , ~ 0 , ~ 0 , ~ 0 , ~ 0 ] ,
147
- - 0x2 : [ ~ 1 , ~ 0 , ~ 0 , ~ 0 , ~ 0 ] ,
148
- - 0x1 : [ ~ 0 , ~ 0 , ~ 0 , ~ 0 , ~ 0 ] ,
149
- + 0x0 : [ 0 , 0 , 0 , 0 , 0 ] ,
150
- + 0x1 : [ 1 , 0 , 0 , 0 , 0 ] ,
151
- + 0x2 : [ 2 , 0 , 0 , 0 , 0 ] ,
152
- + 0x3 : [ 3 , 0 , 0 , 0 , 0 ] ,
153
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE : [ ~ 1 , ~ 0 , ~ 0 , ~ m, 0 ] ,
154
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : [ ~ 0 , ~ 0 , ~ 0 , ~ m, 0 ] ,
155
- + 0x80000000000000000000000000000000 : [ 0 , 0 , 0 , m, 0 ] ,
156
- + 0x80000000000000000000000000000001 : [ 1 , 0 , 0 , m, 0 ] ,
157
- ]
158
- for (actual, expected) in keyValuePairs {
159
- expectEqual ( expected [ 0 ] , actual [ 0 ] )
160
- expectEqual ( expected [ 1 ] , actual [ 1 ] )
161
- expectEqual ( expected [ 2 ] , actual [ 2 ] )
162
- expectEqual ( expected [ 3 ] , actual [ 3 ] )
163
- expectEqual ( expected [ 4 ] , actual [ 4 ] )
164
- }
165
- }
166
-
167
- @available ( SwiftStdlib 5 . 8 , * )
168
- func testSubscriptAsUInt64( ) {
169
- let m = UInt64 ( bitPattern: . min)
170
- let keyValuePairs : KeyValuePairs < StaticBigInt , [ UInt64 ] > = [
171
- - 0x80000000000000000000000000000002 : [ ~ 1 , ~ m, ~ 0 ] ,
172
- - 0x80000000000000000000000000000001 : [ ~ 0 , ~ m, ~ 0 ] ,
173
- - 0x80000000000000000000000000000000 : [ 0 , m, ~ 0 ] ,
174
- - 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : [ 1 , m, ~ 0 ] ,
175
- - 0x4 : [ ~ 3 , ~ 0 , ~ 0 ] ,
176
- - 0x3 : [ ~ 2 , ~ 0 , ~ 0 ] ,
177
- - 0x2 : [ ~ 1 , ~ 0 , ~ 0 ] ,
178
- - 0x1 : [ ~ 0 , ~ 0 , ~ 0 ] ,
179
- + 0x0 : [ 0 , 0 , 0 ] ,
180
- + 0x1 : [ 1 , 0 , 0 ] ,
181
- + 0x2 : [ 2 , 0 , 0 ] ,
182
- + 0x3 : [ 3 , 0 , 0 ] ,
183
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE : [ ~ 1 , ~ m, 0 ] ,
184
- + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF : [ ~ 0 , ~ m, 0 ] ,
185
- + 0x80000000000000000000000000000000 : [ 0 , m, 0 ] ,
186
- + 0x80000000000000000000000000000001 : [ 1 , m, 0 ] ,
187
- ]
188
- for (actual, expected) in keyValuePairs {
189
- expectEqual ( expected [ 0 ] , actual [ 0 ] )
190
- expectEqual ( expected [ 1 ] , actual [ 1 ] )
191
- expectEqual ( expected [ 2 ] , actual [ 2 ] )
128
+ expectEqual ( expected. words [ 0 ] , actual [ 0 ] )
129
+ expectEqual ( expected. words [ 1 ] , actual [ 1 ] )
130
+ expectEqual ( expected. words [ 2 ] , actual [ 2 ] )
192
131
}
193
132
}
194
133
}
0 commit comments