@@ -4,32 +4,90 @@ import {iter, range, list, map} from '@aureooms/js-itertools';
4
4
5
5
import { isPartition } from '../../src' ;
6
6
7
- const macro = ( t , n , partition , is ) => {
8
- t . is ( isPartition ( range ( n ) , partition ) , is , 'partition' ) ;
9
- t . is ( isPartition ( range ( n ) , map ( iter , partition ) ) , is , 'map(iter, partition)' ) ;
7
+ const macro = ( t , set , partition , is ) => {
8
+ t . is ( isPartition ( set , partition ) , is , 'isPartition(set, partition)' ) ;
9
+
10
+ t . is (
11
+ isPartition ( set , map ( iter , partition ) ) ,
12
+ is ,
13
+ 'isPartition(set, map(iter, partition))' ,
14
+ ) ;
15
+
16
+ t . is (
17
+ isPartition ( set , list ( map ( iter , partition ) ) ) ,
18
+ is ,
19
+ 'isPartition(set, list(map(iter, partition)))' ,
20
+ ) ;
21
+
22
+ t . is (
23
+ isPartition ( set , list ( map ( ( x ) => x , partition ) ) ) ,
24
+ is ,
25
+ 'isPartition(set, list(map((x) => x, partition)))' ,
26
+ ) ;
27
+
28
+ t . is (
29
+ isPartition ( iter ( set ) , partition ) ,
30
+ is ,
31
+ 'isPartition(iter(set), partition)' ,
32
+ ) ;
33
+
34
+ t . is (
35
+ isPartition ( iter ( set ) , map ( iter , partition ) ) ,
36
+ is ,
37
+ 'isPartition(iter(set), map(iter, partition))' ,
38
+ ) ;
39
+
10
40
t . is (
11
- isPartition ( range ( n ) , list ( map ( iter , partition ) ) ) ,
41
+ isPartition ( iter ( set ) , list ( map ( iter , partition ) ) ) ,
12
42
is ,
13
- 'list(map(iter, partition))' ,
43
+ 'isPartition(iter(set), list(map(iter, partition) ))' ,
14
44
) ;
45
+
15
46
t . is (
16
- isPartition ( range ( n ) , list ( map ( ( x ) => x , partition ) ) ) ,
47
+ isPartition ( iter ( set ) , list ( map ( ( x ) => x , partition ) ) ) ,
17
48
is ,
18
- 'list(map(x => x, partition))' ,
49
+ 'isPartition(iter(set), list(map((x) => x, partition) ))' ,
19
50
) ;
20
51
} ;
21
52
22
- macro . title = ( title , n , partition , is ) =>
23
- `isPartition(${ n } , ${ JSON . stringify ( partition ) } = ${ is } )` ;
53
+ macro . title = ( title , set , partition , is ) =>
54
+ `isPartition(${ JSON . stringify ( set ) } , ${ JSON . stringify ( partition ) } = ${ is } )` ;
55
+
56
+ const yea = ( t , set , partition ) => macro ( t , set , partition , true ) ;
57
+ yea . title = ( title , set , partition ) => macro . title ( title , set , partition , true ) ;
58
+
59
+ const nay = ( t , set , partition ) => macro ( t , set , partition , false ) ;
60
+ nay . title = ( title , set , partition ) =>
61
+ macro . title ( title , set , partition , false ) ;
62
+
63
+ const _5 = list ( range ( 5 ) ) ;
64
+
65
+ test ( yea , _5 , [ [ 0 , 1 , 2 , 3 , 4 ] ] ) ;
66
+ test ( yea , _5 , [ [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
67
+ test ( yea , _5 , [ [ 0 , 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
68
+ test ( yea , _5 , [ [ 2 , 1 ] , [ 3 ] , [ 0 , 4 ] ] ) ;
69
+
70
+ test ( nay , _5 , [ [ ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
71
+ test ( nay , _5 , [ [ 0 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
72
+ test ( nay , _5 , [ [ 5 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
73
+ test ( nay , _5 , [ [ - 1 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
74
+ test ( nay , _5 , [ [ 2 ** 53 - 1 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
75
+ test ( nay , _5 , [ [ - ( 2 ** 53 ) ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
76
+
77
+ // From Wikipedia: https://en.wikipedia.org/wiki/Partition_of_a_set#Examples
78
+ const _3 = [ 1 , 2 , 3 ] ;
24
79
25
- test ( macro , 5 , [ [ 0 , 1 , 2 , 3 , 4 ] ] , true ) ;
26
- test ( macro , 5 , [ [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , true ) ;
27
- test ( macro , 5 , [ [ 0 , 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , true ) ;
28
- test ( macro , 5 , [ [ 2 , 1 ] , [ 3 ] , [ 0 , 4 ] ] , true ) ;
80
+ // The set { 1, 2, 3 } has these five partitions (one partition per item):
81
+ test ( yea , _3 , [ [ 1 ] , [ 2 ] , [ 3 ] ] ) ;
82
+ test ( yea , _3 , [ [ 1 , 2 ] , [ 3 ] ] ) ;
83
+ test ( yea , _3 , [ [ 1 , 3 ] , [ 2 ] ] ) ;
84
+ test ( yea , _3 , [ [ 1 ] , [ 2 , 3 ] ] ) ;
85
+ test ( yea , _3 , [ [ 1 , 2 , 3 ] ] ) ;
29
86
30
- test ( macro , 5 , [ [ ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
31
- test ( macro , 5 , [ [ 0 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
32
- test ( macro , 5 , [ [ 5 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
33
- test ( macro , 5 , [ [ - 1 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
34
- test ( macro , 5 , [ [ 2 ** 53 - 1 ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
35
- test ( macro , 5 , [ [ - ( 2 ** 53 ) ] , [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] , false ) ;
87
+ // The following are not partitions of { 1, 2, 3 }:
88
+ test ( nay , _3 , [ [ ] , [ 1 , 3 ] , [ 2 ] ] ) ;
89
+ test ( nay , _3 , [
90
+ [ 1 , 2 ] ,
91
+ [ 2 , 3 ] ,
92
+ ] ) ;
93
+ test ( nay , _3 , [ [ 1 ] , [ 2 ] ] ) ;
0 commit comments