forked from ramda/ramda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxor.js
55 lines (50 loc) · 1.7 KB
/
xor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var R = require('../source/index.js');
var eq = require('./shared/eq.js');
describe('xor', function() {
it('compares two values with exclusive or', function() {
eq(R.xor(true, true), false);
eq(R.xor(true, false), true);
eq(R.xor(false, true), true);
eq(R.xor(false, false), false);
});
it('when both values are truthy, it should return false', function() {
eq(R.xor(true, 'foo'), false);
eq(R.xor(42, true), false);
eq(R.xor('foo', 42), false);
eq(R.xor({}, true), false);
eq(R.xor(true, []), false);
eq(R.xor([], {}), false);
eq(R.xor(new Date(), true), false);
eq(R.xor(true, Infinity), false);
eq(R.xor(Infinity, new Date()), false);
});
it('when both values are falsy, it should return false', function() {
eq(R.xor(null, false), false);
eq(R.xor(false, undefined), false);
eq(R.xor(undefined, null), false);
eq(R.xor(0, false), false);
eq(R.xor(false, NaN), false);
eq(R.xor(NaN, 0), false);
eq(R.xor('', false), false);
});
it('when one argument is truthy and the other is falsy, it should return true', function() {
eq(R.xor('foo', null), true);
eq(R.xor(null, 'foo'), true);
eq(R.xor(undefined, 42), true);
eq(R.xor(42, undefined), true);
eq(R.xor(Infinity, NaN), true);
eq(R.xor(NaN, Infinity), true);
eq(R.xor({}, ''), true);
eq(R.xor('', {}), true);
eq(R.xor(new Date(), 0), true);
eq(R.xor(0, new Date()), true);
eq(R.xor([], null), true);
eq(R.xor(undefined, []), true);
});
it('returns a curried function', function() {
eq(R.xor()(true)(true), false);
eq(R.xor()(true)(false), true);
eq(R.xor()(false)(true), true);
eq(R.xor()(false)(false), false);
});
});