@@ -2,13 +2,11 @@ import {readFileSync} from "fs";
2
2
import { assert } from "chai" ;
3
3
4
4
import * as LC from "../../src/lambda-calculus.js" ;
5
- LC . config . purity = "LetRec" ;
6
- LC . config . numEncoding = "BinaryScott" ;
5
+ LC . configure ( { purity : "LetRec" , numEncoding : "BinaryScott" } ) ;
7
6
8
7
const solutionText = readFileSync ( new URL ( "./solution.txt" , import . meta. url ) , { encoding : "utf8" } ) ;
9
8
const solution = LC . compile ( solutionText ) ;
10
- const fromInt = LC . fromIntWith ( LC . config ) ;
11
- const toInt = LC . toIntWith ( LC . config ) ;
9
+ const { fromInt, toInt} = LC ;
12
10
13
11
const { False, True, not, and, or, xor, implies} = solution ;
14
12
const { LT , EQ , GT , compare, lt, le, eq, ge, gt} = solution ;
@@ -27,220 +25,196 @@ const refGCD = m => n => n ? refGCD(n)(m%n) : m ;
27
25
describe ( "Binary Scott tests" , function ( ) {
28
26
this . timeout ( 0 ) ;
29
27
it ( "enumeration" , ( ) => {
28
+ LC . configure ( { purity : "LetRec" , numEncoding : "BinaryScott" } ) ;
30
29
const one = succ ( zero )
31
30
const two = succ ( one )
32
31
const three = succ ( two )
33
32
const four = succ ( three )
34
33
const five = succ ( four )
35
- assert . strictEqual ( toString ( zero ) , "$" ) ;
36
- assert . strictEqual ( toString ( one ) , "1$" ) ;
37
- assert . strictEqual ( toString ( two ) , "01$" ) ;
38
- assert . strictEqual ( toString ( three ) , "11$" ) ;
39
- assert . strictEqual ( toString ( four ) , "001$" ) ;
40
- assert . strictEqual ( toString ( five ) , "101$" ) ;
41
- assert . strictEqual ( toString ( five ) , "101$" ) ;
42
- assert . strictEqual ( toString ( pred ( five ) ) , "001$" ) ;
43
- assert . strictEqual ( toString ( unpad ( pred ( pred ( five ) ) ) ) , "11$" ) ;
44
- assert . strictEqual ( toString ( unpad ( pred ( pred ( pred ( five ) ) ) ) ) , "01$" ) ;
45
- assert . strictEqual ( toString ( unpad ( pred ( pred ( pred ( pred ( five ) ) ) ) ) ) , "1$" ) ;
46
- assert . strictEqual ( toString ( unpad ( pred ( pred ( pred ( pred ( pred ( five ) ) ) ) ) ) ) , "$" ) ;
34
+ assert . equal ( toString ( zero ) , "$" ) ;
35
+ assert . equal ( toString ( one ) , "1$" ) ;
36
+ assert . equal ( toString ( two ) , "01$" ) ;
37
+ assert . equal ( toString ( three ) , "11$" ) ;
38
+ assert . equal ( toString ( four ) , "001$" ) ;
39
+ assert . equal ( toString ( five ) , "101$" ) ;
40
+ assert . equal ( toString ( five ) , "101$" ) ;
41
+ assert . equal ( toString ( pred ( five ) ) , "001$" ) ;
42
+ assert . equal ( toString ( unpad ( pred ( pred ( five ) ) ) ) , "11$" ) ;
43
+ assert . equal ( toString ( unpad ( pred ( pred ( pred ( five ) ) ) ) ) , "01$" ) ;
44
+ assert . equal ( toString ( unpad ( pred ( pred ( pred ( pred ( five ) ) ) ) ) ) , "1$" ) ;
45
+ assert . equal ( toString ( unpad ( pred ( pred ( pred ( pred ( pred ( five ) ) ) ) ) ) ) , "$" ) ;
47
46
} ) ;
48
47
it ( "successor" , ( ) => {
49
- let n = zero ;
48
+ let n = 0 ;
50
49
for ( let i = 1 ; i <= 100 ; i ++ ) {
51
50
n = succ ( n ) ;
52
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ i } <- ${ toString ( n ) } ` ) ;
53
- assert . strictEqual ( toInt ( n ) , i ) ;
51
+ assert . equal ( n , i ) ;
54
52
}
55
53
} ) ;
56
54
it ( "predecessor" , ( ) => {
57
- let n = fromInt ( 100 ) ;
55
+ let n = 100 ;
58
56
for ( let i = 100 ; i -- ; ) {
59
57
n = pred ( n ) ;
60
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ i } <- ${ toString ( n ) } ` ) ;
61
- assert . strictEqual ( toInt ( n ) , i ) ;
58
+ assert . equal ( n , i ) ;
62
59
}
63
60
} ) ;
64
61
it ( "predecessor robustness" , ( ) => {
65
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `pred 01$ -> 1$` ) ;
66
- assert . strictEqual ( toString ( pred ( fromInt ( 2 ) ) ) , "1$" ) ;
67
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `pred $ -> $` ) ;
68
- assert . strictEqual ( toString ( pred ( end => even => odd => end ) ) , "$" ) ;
69
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `pred 0$ -> $` ) ;
70
- assert . strictEqual ( toString ( pred ( end => even => odd => even (
71
- end => even => odd => end ) ) ) , "$" ) ;
72
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `pred 00$ -> $` ) ;
73
- assert . strictEqual ( toString ( pred ( end => even => odd => even (
74
- end => even => odd => even (
75
- end => even => odd => end ) ) ) ) , "$" ) ;
62
+ assert . equal ( toString ( pred ( 2 ) ) , "1$" ) ;
63
+ assert . equal ( toString ( pred ( end => even => odd => end ) ) , "$" ) ;
64
+ assert . equal ( toString ( pred ( end => even => odd => even (
65
+ end => even => odd => end ) ) ) , "$" ) ;
66
+ assert . equal ( toString ( pred ( end => even => odd => even (
67
+ end => even => odd => even (
68
+ end => even => odd => end ) ) ) ) , "$" ) ;
76
69
} ) ;
77
70
it ( "ordering" , ( ) => {
78
71
for ( let i = 1 ; i <= 100 ; i ++ ) {
79
72
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
80
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `compare ${ m } ${ n } ` ) ;
81
- assert . strictEqual ( compare ( fromInt ( m ) ) ( fromInt ( n ) ) ( "-1" ) ( "0" ) ( "1" ) , String ( Number ( m > n ) - Number ( m < n ) ) ) ;
73
+ assert . equal ( compare ( fromInt ( m ) ) ( fromInt ( n ) ) ( "-1" ) ( "0" ) ( "1" ) , String ( Number ( m > n ) - Number ( m < n ) ) ) ;
82
74
}
83
75
} ) ;
84
76
it ( "comparison" , ( ) => {
85
77
for ( let i = 1 ; i <= 100 ; i ++ ) {
86
78
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
87
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `compare ${ m } ${ n } ` ) ;
88
- assert . strictEqual ( lt ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m < n ) ;
89
- assert . strictEqual ( le ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m <= n ) ;
90
- assert . strictEqual ( eq ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m == n ) ;
91
- assert . strictEqual ( ge ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m >= n ) ;
92
- assert . strictEqual ( gt ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m > n ) ;
93
- assert . strictEqual ( eq ( fromInt ( m ) ) ( fromInt ( m ) ) ( false ) ( true ) , true ) ;
79
+ assert . equal ( lt ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m < n ) ;
80
+ assert . equal ( le ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m <= n ) ;
81
+ assert . equal ( eq ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m == n ) ;
82
+ assert . equal ( ge ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m >= n ) ;
83
+ assert . equal ( gt ( fromInt ( m ) ) ( fromInt ( n ) ) ( false ) ( true ) , m > n ) ;
84
+ assert . equal ( eq ( fromInt ( m ) ) ( fromInt ( m ) ) ( false ) ( true ) , true ) ;
94
85
}
95
86
} ) ;
96
87
it ( "addition" , ( ) => {
97
88
for ( let i = 1 ; i <= 100 ; i ++ ) {
98
89
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
99
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } + ${ n } = ${ m + n } ` ) ;
100
- assert . strictEqual ( toInt ( plus ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m + n ) ;
90
+ assert . equal ( plus ( m ) ( n ) , m + n ) ;
101
91
}
102
92
} ) ;
103
93
it ( "multiplication" , ( ) => {
104
94
for ( let i = 1 ; i <= 100 ; i ++ ) {
105
95
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
106
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } * ${ n } = ${ m * n } ` ) ;
107
- assert . strictEqual ( toInt ( times ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m * n ) ;
96
+ assert . equal ( times ( m ) ( n ) , m * n ) ;
108
97
}
109
98
} ) ;
110
99
it ( "subtraction" , ( ) => {
111
100
for ( let i = 1 ; i <= 100 ; i ++ ) {
112
101
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
113
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `subtract ${ m } ${ n } ` ) ;
114
- assert . strictEqual ( toInt ( minus ( fromInt ( m ) ) ( fromInt ( n ) ) ) , Math . max ( 0 , m - n ) ) ;
115
- assert . strictEqual ( toInt ( minus ( fromInt ( n ) ) ( fromInt ( m ) ) ) , Math . max ( 0 , n - m ) ) ;
102
+ assert . equal ( minus ( m ) ( n ) , Math . max ( 0 , m - n ) ) ;
103
+ assert . equal ( minus ( n ) ( m ) , Math . max ( 0 , n - m ) ) ;
116
104
}
117
105
} ) ;
118
106
it ( "division" , ( ) => {
119
107
for ( let i = 1 ; i <= 100 ; i ++ ) {
120
108
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
121
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `division ${ m } ${ n } ` ) ;
122
- assert . deepEqual ( toPair ( divMod ( fromInt ( m ) ) ( fromInt ( n || 1 ) ) ) . map ( toInt ) , [ m / ( n || 1 ) | 0 , m % ( n || 1 ) ] ) ;
123
- assert . deepEqual ( toPair ( divMod ( fromInt ( n ) ) ( fromInt ( m || 1 ) ) ) . map ( toInt ) , [ n / ( m || 1 ) | 0 , n % ( m || 1 ) ] ) ;
109
+ assert . deepEqual ( toPair ( divMod ( m ) ( n || 1 ) ) . map ( toInt ) , [ m / ( n || 1 ) | 0 , m % ( n || 1 ) ] ) ;
110
+ assert . deepEqual ( toPair ( divMod ( n ) ( m || 1 ) ) . map ( toInt ) , [ n / ( m || 1 ) | 0 , n % ( m || 1 ) ] ) ;
124
111
}
125
112
} ) ;
126
113
it ( "exponentiation" , ( ) => {
127
114
for ( let i = 1 ; i <= 100 ; i ++ ) {
128
115
const m = rnd ( i ) , n = rnd ( i % 10 ) ;
129
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } ** ${ n } = ${ m ** n } ` ) ;
130
- assert . strictEqual ( toInt ( pow ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m ** n ) ;
116
+ assert . equal ( pow ( m ) ( n ) , m ** n ) ;
131
117
}
132
118
} ) ;
133
119
it ( "greatest common divisor" , ( ) => {
134
120
for ( let i = 1 ; i <= 100 ; i ++ ) {
135
121
const m = rnd ( i ) , n = rnd ( i ) ;
136
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `gcd ${ m } ${ n } = ${ refGCD ( m ) ( n ) } ` ) ;
137
- assert . strictEqual ( toInt ( gcd ( fromInt ( m ) ) ( fromInt ( n ) ) ) , refGCD ( m ) ( n ) ) ;
122
+ assert . equal ( gcd ( m ) ( n ) , refGCD ( m ) ( n ) ) ;
138
123
}
139
124
} ) ;
140
125
it ( "least common multiple" , ( ) => {
141
126
for ( let i = 1 ; i <= 100 ; i ++ ) {
142
127
const m = rnd ( i ) , n = rnd ( i ) ;
143
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `lcm ${ m } ${ n } = ${ m / ( refGCD ( m ) ( n ) || 1 ) * n } ` ) ;
144
- assert . strictEqual ( toInt ( lcm ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m / ( refGCD ( m ) ( n ) || 1 ) * n ) ;
128
+ assert . equal ( lcm ( m ) ( n ) , m / ( refGCD ( m ) ( n ) || 1 ) * n ) ;
145
129
}
146
130
} ) ;
147
131
it ( "minimum" , ( ) => {
148
132
for ( let i = 1 ; i <= 100 ; i ++ ) {
149
133
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
150
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `min ${ m } ${ n } = ${ Math . min ( m , n ) } ` ) ;
151
- assert . strictEqual ( toInt ( min ( fromInt ( m ) ) ( fromInt ( n ) ) ) , Math . min ( m , n ) ) ;
134
+ assert . equal ( min ( m ) ( n ) , Math . min ( m , n ) ) ;
152
135
}
153
136
} ) ;
154
137
it ( "maximum" , ( ) => {
155
138
for ( let i = 1 ; i <= 100 ; i ++ ) {
156
139
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
157
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `max ${ m } + ${ n } = ${ Math . max ( m , n ) } ` ) ;
158
- assert . strictEqual ( toInt ( max ( fromInt ( m ) ) ( fromInt ( n ) ) ) , Math . max ( m , n ) ) ;
140
+ assert . equal ( max ( m ) ( n ) , Math . max ( m , n ) ) ;
159
141
}
160
142
} ) ;
161
143
it ( "shifting bits" , ( ) => {
162
144
for ( let i = 1 ; i <= 100 ; i ++ ) {
163
145
const n = rnd ( i * i ) ;
164
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `shift ${ n } ` ) ;
165
- assert . strictEqual ( toInt ( shiftL ( fromInt ( n ) ) ) , n >> 1 ) ;
166
- assert . strictEqual ( toInt ( shiftR0 ( fromInt ( n ) ) ) , n << 1 ) ;
167
- assert . strictEqual ( toInt ( shiftR1 ( fromInt ( n ) ) ) , n << 1 | 1 ) ;
146
+ assert . equal ( shiftL ( n ) , n >> 1 ) ;
147
+ assert . equal ( shiftR0 ( n ) , n << 1 ) ;
148
+ assert . equal ( shiftR1 ( n ) , n << 1 | 1 ) ;
168
149
}
169
150
} ) ;
170
151
it ( "zero padding" , ( ) => {
171
152
for ( let i = 1 ; i <= 100 ; i ++ ) {
172
153
const n = rnd ( i * i ) ;
173
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `isPadded ${ n } ` ) ;
174
- assert . strictEqual ( isPadded ( fromInt ( n ) ) ( false ) ( true ) , false ) ;
175
- assert . strictEqual ( isPadded ( pad ( fromInt ( n ) ) ) ( false ) ( true ) , true ) ;
176
- assert . strictEqual ( isPadded ( pad ( pad ( fromInt ( n ) ) ) ) ( false ) ( true ) , true ) ;
177
- assert . strictEqual ( isPadded ( pad ( pad ( pad ( fromInt ( n ) ) ) ) ) ( false ) ( true ) , true ) ;
154
+ assert . equal ( isPadded ( n ) ( false ) ( true ) , false ) ;
155
+ assert . equal ( isPadded ( pad ( n ) ) ( false ) ( true ) , true ) ;
156
+ assert . equal ( isPadded ( pad ( pad ( n ) ) ) ( false ) ( true ) , true ) ;
157
+ assert . equal ( isPadded ( pad ( pad ( pad ( n ) ) ) ) ( false ) ( true ) , true ) ;
178
158
}
179
159
} ) ;
180
160
it ( "bitwise and" , ( ) => {
181
161
for ( let i = 1 ; i <= 100 ; i ++ ) {
182
162
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
183
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } & ${ n } = ${ m & n } ` ) ;
184
- assert . strictEqual ( toInt ( bitAnd ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m & n ) ;
163
+ assert . equal ( bitAnd ( m ) ( n ) , m & n ) ;
185
164
}
186
165
} ) ;
187
166
it ( "bitwise or" , ( ) => {
188
167
for ( let i = 1 ; i <= 100 ; i ++ ) {
189
168
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
190
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } | ${ n } = ${ m | n } ` ) ;
191
- assert . strictEqual ( toInt ( bitOr ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m | n ) ;
169
+ assert . equal ( bitOr ( m ) ( n ) , m | n ) ;
192
170
}
193
171
} ) ;
194
172
it ( "bitwise exclusive or" , ( ) => {
195
173
for ( let i = 1 ; i <= 100 ; i ++ ) {
196
174
const m = rnd ( i * i ) , n = rnd ( i * i ) ;
197
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `${ m } ^ ${ n } = ${ m ^ n } ` ) ;
198
- assert . strictEqual ( toInt ( bitXor ( fromInt ( m ) ) ( fromInt ( n ) ) ) , m ^ n ) ;
175
+ assert . equal ( bitXor ( m ) ( n ) , m ^ n ) ;
199
176
}
200
177
} ) ;
201
178
it ( "testing bits" , ( ) => {
202
179
for ( let i = 1 ; i <= 100 ; i ++ ) {
203
180
const j = rnd ( i % 32 ) , n = rnd ( i * i ) ;
204
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `testBit ${ j } ${ n } = ${ Boolean ( n & 1 << j ) } ` ) ;
205
- assert . strictEqual ( testBit ( fromInt ( j ) ) ( fromInt ( n ) ) ( false ) ( true ) , Boolean ( n & 1 << j ) ) ; // JS restricted to 32-bit
181
+ assert . equal ( testBit ( j ) ( n ) ( false ) ( true ) , Boolean ( n & 1 << j ) ) ; // JS restricted to 32-bit
206
182
}
207
183
} ) ;
208
184
it ( "setting bits" , ( ) => {
209
185
for ( let i = 1 ; i <= 100 ; i ++ ) {
210
186
const j = rnd ( i % 32 ) ;
211
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `bit ${ j } = ${ 1 << j } ` ) ;
212
- assert . strictEqual ( toInt ( bit ( fromInt ( j ) ) ) , 1 << j ) ; // JS restricted to 32-bit
187
+ assert . equal ( bit ( j ) , 1 << j ) ; // JS restricted to 32-bit
213
188
}
214
189
} ) ;
215
190
it ( "population count" , ( ) => {
216
191
const refPopCount = n => n && 1 + refPopCount ( n & n - 1 ) ;
217
192
for ( let i = 1 ; i <= 100 ; i ++ ) {
218
193
const n = rnd ( i * i ) ;
219
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `popCount ${ n } = ${ refPopCount ( n ) } ` ) ;
220
- assert . strictEqual ( toInt ( popCount ( fromInt ( n ) ) ) , refPopCount ( n ) ) ; // JS restricted to 32-bit
194
+ assert . equal ( popCount ( n ) , refPopCount ( n ) ) ; // JS restricted to 32-bit
221
195
}
222
196
} ) ;
223
197
it ( "logical not" , ( ) => {
224
- assert . strictEqual ( not ( False ) ( false ) ( true ) , true ) ;
225
- assert . strictEqual ( not ( True ) ( false ) ( true ) , false ) ;
198
+ assert . equal ( not ( False ) ( false ) ( true ) , true ) ;
199
+ assert . equal ( not ( True ) ( false ) ( true ) , false ) ;
226
200
} ) ;
227
201
it ( "logical and" , ( ) => {
228
- assert . strictEqual ( and ( False ) ( False ) ( false ) ( true ) , false ) ;
229
- assert . strictEqual ( and ( False ) ( True ) ( false ) ( true ) , false ) ;
230
- assert . strictEqual ( and ( True ) ( False ) ( false ) ( true ) , false ) ;
231
- assert . strictEqual ( and ( True ) ( True ) ( false ) ( true ) , true ) ;
202
+ assert . equal ( and ( False ) ( False ) ( false ) ( true ) , false ) ;
203
+ assert . equal ( and ( False ) ( True ) ( false ) ( true ) , false ) ;
204
+ assert . equal ( and ( True ) ( False ) ( false ) ( true ) , false ) ;
205
+ assert . equal ( and ( True ) ( True ) ( false ) ( true ) , true ) ;
232
206
} ) ;
233
207
it ( "logical or" , ( ) => {
234
- assert . strictEqual ( or ( False ) ( False ) ( false ) ( true ) , false ) ;
235
- assert . strictEqual ( or ( False ) ( True ) ( false ) ( true ) , true ) ;
236
- assert . strictEqual ( or ( True ) ( False ) ( false ) ( true ) , true ) ;
237
- assert . strictEqual ( or ( True ) ( True ) ( false ) ( true ) , true ) ;
208
+ assert . equal ( or ( False ) ( False ) ( false ) ( true ) , false ) ;
209
+ assert . equal ( or ( False ) ( True ) ( false ) ( true ) , true ) ;
210
+ assert . equal ( or ( True ) ( False ) ( false ) ( true ) , true ) ;
211
+ assert . equal ( or ( True ) ( True ) ( false ) ( true ) , true ) ;
238
212
} ) ;
239
213
it ( "logical exclusive or" , ( ) => {
240
- assert . strictEqual ( xor ( False ) ( False ) ( false ) ( true ) , false ) ;
241
- assert . strictEqual ( xor ( False ) ( True ) ( false ) ( true ) , true ) ;
242
- assert . strictEqual ( xor ( True ) ( False ) ( false ) ( true ) , true ) ;
243
- assert . strictEqual ( xor ( True ) ( True ) ( false ) ( true ) , false ) ;
214
+ assert . equal ( xor ( False ) ( False ) ( false ) ( true ) , false ) ;
215
+ assert . equal ( xor ( False ) ( True ) ( false ) ( true ) , true ) ;
216
+ assert . equal ( xor ( True ) ( False ) ( false ) ( true ) , true ) ;
217
+ assert . equal ( xor ( True ) ( True ) ( false ) ( true ) , false ) ;
244
218
} ) ;
245
219
it ( "logical implies" , ( ) => {
246
220
assert . strictEqual ( implies ( False ) ( False ) ( false ) ( true ) , true ) ;
@@ -251,9 +225,8 @@ describe("Binary Scott tests",function(){
251
225
it ( "parity" , ( ) => {
252
226
for ( let i = 1 ; i <= 100 ; i ++ ) {
253
227
const n = rnd ( i * i * i ) ;
254
- if ( LC . config . verbosity >= "Loquacious" ) console . log ( `parity ${ n } ` ) ;
255
- assert . strictEqual ( odd ( fromInt ( n ) ) ( false ) ( true ) , Boolean ( n & 1 ) ) ;
256
- assert . strictEqual ( even ( fromInt ( n ) ) ( false ) ( true ) , ! ( n & 1 ) ) ;
228
+ assert . equal ( odd ( fromInt ( n ) ) ( false ) ( true ) , Boolean ( n & 1 ) ) ;
229
+ assert . equal ( even ( fromInt ( n ) ) ( false ) ( true ) , ! ( n & 1 ) ) ;
257
230
}
258
231
} ) ;
259
232
} ) ;
0 commit comments