@@ -10,9 +10,12 @@ my $module = 'CustomSet';
10
10
11
11
use_ok($module ) or BAIL_OUT(" You need to create a module called $module .pm" );
12
12
13
- foreach my $f (qw/ new delete difference is_disjoint empty intersect
14
- is_member add size is_subset to_list union is_equal/ ) {
15
- can_ok($module , $f ) or BAIL_OUT(" You need to implement the function '$f '" );
13
+ for my $method (qw(
14
+ new add remove is_empty
15
+ is_member size to_list
16
+ union intersect difference
17
+ is_disjoint is_equal is_subset) ) {
18
+ can_ok($module , $method ) or BAIL_OUT(" You need to implement the method '$method '" );
16
19
}
17
20
18
21
sub set { return $module -> new(@_ ) };
@@ -23,15 +26,65 @@ subtest 'Tested new()' => sub {
23
26
isa_ok( $module -> new(), $module , " return value of new()" );
24
27
};
25
28
26
- subtest ' Tested equal ()' => sub {
27
- plan tests => 6 ;
29
+ subtest ' Tested add ()' => sub {
30
+ plan tests => 4 ;
28
31
29
- ok( set(1,3)-> is_equal( set(3,1) ), " order doesn't matter" );
30
- ok( set()-> is_equal( set() ), " empty sets are equal" );
31
- ok( ! set(1..3)-> is_equal( set(3..5) ), " different sets are not equal" );
32
- ok( ! set()-> is_equal( set(1..3) ), " empty set is not equal to non-empty set" );
33
- ok( ! set(1..3)-> is_equal( set() ), " non-empty set is not equal to empty set" );
34
- ok( ! set(1..4)-> is_equal( set(3..6) ), " partial subsets are not equal" );
32
+ isa_ok( set()-> add(1), $module , " return value of add()" );
33
+ ok( set()-> add(1)-> is_equal( set(1) ), " adding to empty set" );
34
+ ok( set(1,2,4)-> add(3)-> is_equal( set(1..4) ), " adding to non-empty set" );
35
+ ok( set(1,2,3)-> add(3)-> is_equal( set(1..3) ), " adding existing member is noop" );
36
+ };
37
+
38
+ subtest ' Tested remove()' => sub {
39
+ plan tests => 3;
40
+
41
+ isa_ok( set(3,2,1)-> remove(2), $module , " return value of remove()" );
42
+ ok( set(3,2,1)-> remove(2)-> is_equal( set(1,3) ), " removing single element" );
43
+ ok( set(3,2,1)-> remove(4)-> is_equal( set(1..3) ), " removing non-existant element" );
44
+ };
45
+
46
+ subtest ' Tested is_empty()' => sub {
47
+ plan tests => 2;
48
+
49
+ ok( set()-> is_empty(), " sets with no elements are empty" );
50
+ ok( !set(1)-> is_empty(), " sets with elements are not empty" );
51
+ };
52
+
53
+ subtest ' Tested is_member()' => sub {
54
+ plan tests => 4;
55
+
56
+ ok( set(1,2,3)-> is_member(2), " element is member" );
57
+ ok( set(1..10)-> is_member(10), " edge element is also member" );
58
+ ok( ! set(1..10)-> is_member(11), " element is not member" );
59
+ ok( ! set()-> is_member(1), " nothing is member of the empty set" );
60
+ };
61
+
62
+ subtest ' Tested size()' => sub {
63
+ plan tests => 3;
64
+
65
+ is( set()-> size(), 0, " size of empty set is 0" );
66
+ is( set(1..3)-> size(), 3, " size of set with 3 members is 3!" );
67
+ is( set(1,2,3,2)-> size(), 3, " size of set with 3 members is still 3!" );
68
+ };
69
+
70
+ subtest ' Tested to_list()' => sub {
71
+ plan tests => 3;
72
+
73
+ is_deeply( [ sort +set()-> to_list() ], [], " empty set results in empty list" );
74
+ is_deeply( [ sort +set(1..3)-> to_list() ], [1,2,3], " set with elements results in list with elements" );
75
+ is_deeply( [ sort +set(3,1,2,1)-> to_list() ], [1,2,3], " set with duplicate elements still results in list with uniq elements" );
76
+ };
77
+
78
+ subtest ' Tested union()' => sub {
79
+ plan tests => 7;
80
+
81
+ isa_ok( set()-> union( set() ), $module , " return value of union()" );
82
+ ok( set()-> union( set() )-> is_equal( set() ), " union of empty sets is an empty set" );
83
+ ok( set(2)-> union( set() )-> is_equal( set(2) ), " union of non-empty set and empty set is non-empty set" );
84
+ ok( set()-> union( set(2) )-> is_equal( set(2) ), " union of empty set and non-empty set is non-empty set" );
85
+ ok( set(1,3)-> union( set(3,1) )-> is_equal( set(1,3) ), " union with self is self" );
86
+ ok( set(1,3)-> union( set(2,4) )-> is_equal( set(1..4) ), " small union" );
87
+ ok( set(1..10, 20..30)-> union( set(5..25) )-> is_equal( set(1..30) ), " large union" );
35
88
};
36
89
37
90
subtest ' Tested intersect()' => sub {
@@ -43,24 +96,7 @@ subtest 'Tested intersect()' => sub {
43
96
ok( set(1..3)-> intersect( set(4..6) )-> is_equal( set() ), " nothing in common" );
44
97
ok( set(1,3,5,7,9)-> intersect( set(3..7) )-> is_equal( set(3,5,7) ), " intersect with odd numbers" );
45
98
ok( set()-> intersect( set() )-> is_equal( set() ), " an empty set is an empty set" );
46
- ok( set(1..3)-> intersect( set(3) )-> is_equal( set(3) ), " Intersect with unary set results in unary set" );
47
- };
48
-
49
- subtest ' Tested delete()' => sub {
50
- plan tests => 3;
51
-
52
- isa_ok( set(3,2,1)-> delete (2), $module , " return value of delete()" );
53
- ok( set(3,2,1)-> delete (2)-> is_equal( set(1,3) ), " removing single element" );
54
- ok( set(3,2,1)-> delete (4)-> is_equal( set(1..3) ), " removing non-existant element" );
55
- };
56
-
57
- subtest ' Tested add()' => sub {
58
- plan tests => 4;
59
-
60
- isa_ok( set()-> add(1), $module , " return value of add()" );
61
- ok( set()-> add(1)-> is_equal( set(1) ), " adding to empty set" );
62
- ok( set(1,2,4)-> add(3)-> is_equal( set(1..4) ), " adding to non-empty set" );
63
- ok( set(1,2,3)-> add(3)-> is_equal( set(1..3) ), " adding existing member is noop" );
99
+ ok( set(1..3)-> intersect( set(3) )-> is_equal( set(3) ), " Intersect with unary set results in unary set" );
64
100
};
65
101
66
102
subtest ' Tested difference()' => sub {
@@ -84,35 +120,6 @@ subtest 'Tested is_disjoint()' => sub {
84
120
ok( set(1..3)-> is_disjoint( set() ), " a non-empty set is disjoint to an empty set" );
85
121
};
86
122
87
- subtest ' Tested empty()' => sub {
88
- plan tests => 4;
89
-
90
- isa_ok( set()-> empty(), $module , " return value of empty()" );
91
- ok( set()-> empty()-> is_equal( set() ), " emptying empty set results in an empty set" );
92
- ok( set(1..3)-> empty()-> is_equal( set() ), " set empty after emptying (duh!)" );
93
-
94
- my $set = set(1..3);
95
- $set -> empty();
96
- ok( $set -> is_equal( set() ), " not just an empty set returned, but set was emptied" );
97
- };
98
-
99
- subtest ' Tested is_member()' => sub {
100
- plan tests => 4;
101
-
102
- ok( set(1,2,3)-> is_member(2), " element is member" );
103
- ok( set(1..10)-> is_member(10), " edge element is also member" );
104
- ok( ! set(1..10)-> is_member(11), " element is not member" );
105
- ok( ! set()-> is_member(1), " nothing is member of the empty set" );
106
- };
107
-
108
- subtest ' Tested size()' => sub {
109
- plan tests => 3;
110
-
111
- is( set()-> size(), 0, " size of empty set is 0" );
112
- is( set(1..3)-> size(), 3, " size of set with 3 members is 3!" );
113
- is( set(1,2,3,2)-> size(), 3, " size of set with 3 members is still 3!" );
114
- };
115
-
116
123
subtest ' Tested is_subset()' => sub {
117
124
plan tests => 8;
118
125
@@ -126,22 +133,13 @@ subtest 'Tested is_subset()' => sub {
126
133
ok( ! set(1..10)-> is_subset( set(1..3, 11) ), " smaller number of elements but still not a subset" );
127
134
};
128
135
129
- subtest ' Tested union()' => sub {
130
- plan tests => 7;
131
-
132
- isa_ok( set()-> union( set() ), $module , " return value of union()" );
133
- ok( set()-> union( set() )-> is_equal( set() ), " union of empty sets is an empty set" );
134
- ok( set(2)-> union( set() )-> is_equal( set(2) ), " union of non-empty set and empty set is non-empty set" );
135
- ok( set()-> union( set(2) )-> is_equal( set(2) ), " union of empty set and non-empty set is non-empty set" );
136
- ok( set(1,3)-> union( set(3,1) )-> is_equal( set(1,3) ), " union with self is self" );
137
- ok( set(1,3)-> union( set(2,4) )-> is_equal( set(1..4) ), " small union" );
138
- ok( set(1..10, 20..30)-> union( set(5..25) )-> is_equal( set(1..30) ), " large union" );
139
- };
140
-
141
- subtest ' Tested to_list()' => sub {
142
- plan tests => 3;
136
+ subtest ' Tested equal()' => sub {
137
+ plan tests => 6;
143
138
144
- is_deeply( [ sort +set()-> to_list() ], [], " empty set results in empty list" );
145
- is_deeply( [ sort +set(1..3)-> to_list() ], [1,2,3], " set with elements results in list with elements" );
146
- is_deeply( [ sort +set(3,1,2,1)-> to_list() ], [1,2,3], " set with duplicate elements still results in list with uniq elements" );
139
+ ok( set(1,3)-> is_equal( set(3,1) ), " order doesn't matter" );
140
+ ok( set()-> is_equal( set() ), " empty sets are equal" );
141
+ ok( ! set(1..3)-> is_equal( set(3..5) ), " different sets are not equal" );
142
+ ok( ! set()-> is_equal( set(1..3) ), " empty set is not equal to non-empty set" );
143
+ ok( ! set(1..3)-> is_equal( set() ), " non-empty set is not equal to empty set" );
144
+ ok( ! set(1..4)-> is_equal( set(3..6) ), " partial subsets are not equal" );
147
145
};
0 commit comments