1
+ import { describe , it } from "./_describe.ts"
2
+ import { xor } from '../mod.ts'
3
+ import { eq } from "./utils/utils.ts"
4
+
5
+
6
+ describe ( 'xor' , ( ) => {
7
+
8
+ it ( 'should compare two values with exclusive or' , ( ) => {
9
+ eq ( xor ( true , true ) , false )
10
+ eq ( xor ( true , false ) , true )
11
+ eq ( xor ( false , true ) , true )
12
+ eq ( xor ( false , false ) , false )
13
+ } )
14
+
15
+ it ( 'should return false when both values are true' , ( ) => {
16
+ eq ( xor ( true , 'foo' ) , false )
17
+ eq ( xor ( 42 , true ) , false )
18
+ eq ( xor ( 'foo' , 42 ) , false )
19
+ eq ( xor ( { } , true ) , false )
20
+ eq ( xor ( true , [ ] ) , false )
21
+ eq ( xor ( [ ] , { } ) , false )
22
+ eq ( xor ( new Date ( ) , true ) , false )
23
+ eq ( xor ( true , Infinity ) , false )
24
+ eq ( xor ( Infinity , new Date ( ) ) , false )
25
+ } )
26
+
27
+ it ( 'should return false when both values are false' , ( ) => {
28
+ eq ( xor ( null , false ) , false )
29
+ eq ( xor ( false , undefined ) , false )
30
+ eq ( xor ( undefined , null ) , false )
31
+ eq ( xor ( 0 , false ) , false )
32
+ eq ( xor ( false , NaN ) , false )
33
+ eq ( xor ( NaN , 0 ) , false )
34
+ eq ( xor ( '' , false ) , false )
35
+ } )
36
+
37
+ it ( 'should return true when one argument is true and the other is false' , ( ) => {
38
+ eq ( xor ( 'foo' , null ) , true )
39
+ eq ( xor ( null , 'foo' ) , true )
40
+ eq ( xor ( undefined , 42 ) , true )
41
+ eq ( xor ( 42 , undefined ) , true )
42
+ eq ( xor ( Infinity , NaN ) , true )
43
+ eq ( xor ( NaN , Infinity ) , true )
44
+ eq ( xor ( { } , '' ) , true )
45
+ eq ( xor ( '' , { } ) , true )
46
+ eq ( xor ( new Date ( ) , 0 ) , true )
47
+ eq ( xor ( 0 , new Date ( ) ) , true )
48
+ eq ( xor ( [ ] , null ) , true )
49
+ eq ( xor ( undefined , [ ] ) , true )
50
+ } )
51
+
52
+ it ( 'should return a curried function' , ( ) => {
53
+ eq ( xor ( ) ( true ) ( true ) , false )
54
+ eq ( xor ( ) ( true ) ( false ) , true )
55
+ eq ( xor ( ) ( false ) ( true ) , true )
56
+ eq ( xor ( ) ( false ) ( false ) , false )
57
+ } )
58
+
59
+ } )
0 commit comments