@@ -4,32 +4,90 @@ import {iter, range, list, map} from '@aureooms/js-itertools';
44
55import { isPartition } from '../../src' ;
66
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+
1040 t . is (
11- isPartition ( range ( n ) , list ( map ( iter , partition ) ) ) ,
41+ isPartition ( iter ( set ) , list ( map ( iter , partition ) ) ) ,
1242 is ,
13- 'list(map(iter, partition))' ,
43+ 'isPartition(iter(set), list(map(iter, partition) ))' ,
1444 ) ;
45+
1546 t . is (
16- isPartition ( range ( n ) , list ( map ( ( x ) => x , partition ) ) ) ,
47+ isPartition ( iter ( set ) , list ( map ( ( x ) => x , partition ) ) ) ,
1748 is ,
18- 'list(map(x => x, partition))' ,
49+ 'isPartition(iter(set), list(map((x) => x, partition) ))' ,
1950 ) ;
2051} ;
2152
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 ] ;
2479
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 ] ] ) ;
2986
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