1use strict; 2use warnings; 3 4use t::std; 5 6{ 7 check_test( 8 sub { 9 cmp_deeply([], set()); 10 }, 11 { 12 actual_ok => 1, 13 diag => "", 14 }, 15 "empty eq" 16 ); 17 18 check_test( 19 sub { 20 cmp_deeply(["a"], set("a", "a")); 21 }, 22 { 23 actual_ok => 1, 24 diag => "", 25 }, 26 "empty eq" 27 ); 28 29 check_test( 30 sub { 31 cmp_deeply(['a', 'b', 'b', ['c', 'd']], set('b', 'a', ['c', 'd'], 'b')); 32 }, 33 { 34 actual_ok => 1, 35 diag => "", 36 }, 37 "3 elem eq" 38 ); 39 40 check_test( 41 sub { 42 cmp_deeply(['a', [], 'b', 'b'], set()); 43 }, 44 { 45 actual_ok => 0, 46 diag => <<EOM, 47Comparing \$data as a Set 48Extra: 'a', 'b', 1 reference 49EOM 50 }, 51 "empty extra" 52 ); 53 54 check_test( 55 sub { 56 cmp_deeply([], set('a', [], 'a', 'b')); 57 }, 58 { 59 actual_ok => 0, 60 diag => <<EOM, 61Comparing \$data as a Set 62Missing: 'a', 'b', 1 reference 63EOM 64 }, 65 "empty missing" 66 ); 67 68 check_test( 69 sub { 70 cmp_deeply(['a', 'a', 'b', [\"c"], "d", []], set({}, 'a', [\"c"], 'd', 'd', "e")); 71 }, 72 { 73 actual_ok => 0, 74 diag => <<EOM, 75Comparing \$data as a Set 76Missing: 'e', 1 reference 77Extra: 'b', 1 reference 78EOM 79 }, 80 "extra and missing" 81 ); 82 83 check_test( 84 sub { 85 cmp_deeply("a", set()); 86 }, 87 { 88 actual_ok => 0, 89 diag => <<EOM, 90Comparing \$data as a Set 91got : 'a' 92expect : An array to use as a Set 93EOM 94 }, 95 "no array" 96 ); 97 98 check_test( 99 sub { 100 cmp_deeply(['a',['a', 'b', 'b'], ['c', 'd', 'c','d'], ['a', 'b', 'a']], 101 set(set('c', 'd', 'd'), set('a', 'b', 'a'), set('c', 'c', 'd'), 'a') 102 ); 103 }, 104 { 105 actual_ok => 1, 106 diag => '', 107 }, 108 "set of sets eq" 109 ); 110 check_test( 111 sub { 112 cmp_deeply([['a', 'b', 'c'], ['c', 'd', 'c'], ['a', 'b', 'a']], 113 set(set('c', 'd', 'c'), set('a', 'b', 'a'), set('b', 'b', 'a')) 114 ); 115 }, 116 { 117 actual_ok => 0, 118 diag => <<EOM, 119Comparing \$data as a Set 120Extra: 1 reference 121EOM 122 }, 123 "set of sets not eq" 124 ); 125 126 my $b1 = set('a'); 127 my $b2 = [set('b')]; 128 $b1->add($b1, $b2, $b1); 129 $b2->[0]->add($b2, $b1, $b2); 130 131 my $v1 = ['a']; 132 my $v2 = [['b']]; 133 push(@$v1, $v2, $v1, $v2); 134 push(@{$v2->[0]}, $v1, $v2, $v1); 135 136 check_test( 137 sub { 138 cmp_deeply($v1, $b1); 139 }, 140 { 141 actual_ok => 1, 142 diag => '', 143 }, 144 "circular double set eq" 145 ); 146 147 $b1->add('b', 'b'); 148 push(@$v1, 'c', 'c'); 149 check_test( 150 sub { 151 cmp_deeply($v1, $b1); 152 }, 153 { 154 actual_ok => 0, 155 diag => <<EOM, 156Comparing \$data as a Set 157Missing: 'b' 158Extra: 'c' 159EOM 160 }, 161 "circular double set not eq" 162 ); 163 164 check_test( 165 sub { 166 cmp_set([1, 2, 2], [1, 1, 2]); 167 }, 168 { 169 actual_ok => 1, 170 }, 171 "cmp_set eq" 172 ); 173 174 check_test( 175 sub { 176 cmp_set([1, 2, 2, 3], [1, 1, 2]); 177 }, 178 { 179 actual_ok => 0, 180 }, 181 "cmp_set not eq" 182 ); 183} 184 185{ 186 my $a1 = \"a"; 187 my $b1 = \"b"; 188 my $a2 = \"a"; 189 my $b2 = \"b"; 190 191 TODO: 192 { 193 todo_skip( 194 "Because I want to get it out the door see notes on bags and sets", 195 5 196 ); 197 check_test( 198 sub { 199 cmp_deeply([[\'a', \'b']], set(set($a2, $b1), set($b2, $a1))) 200 }, 201 { 202 actual_ok => 1, 203 diag => "", 204 }, 205 "set compare()" 206 ); 207 } 208 209 check_test( 210 sub { 211 cmp_deeply(['a', 'b', 'c', 'a'], supersetof('b', 'a', 'b')); 212 }, 213 { 214 actual_ok => 1, 215 diag => "", 216 }, 217 "supersetof yes" 218 ); 219 220 check_test( 221 sub { 222 cmp_deeply(['a', 'b', 'c', 'a'], supersetof('d', 'b', 'd')); 223 }, 224 { 225 actual_ok => 0, 226 diag => <<'EOM', 227Comparing $data as a SuperSet 228Missing: 'd' 229EOM 230 }, 231 "supersetof no" 232 ); 233 234 check_test( 235 sub { 236 cmp_deeply(['b', 'a', 'b'], subsetof('a', 'b', 'c', 'a')); 237 }, 238 { 239 actual_ok => 1, 240 diag => "", 241 }, 242 "subsetof yes" 243 ); 244 245 check_test( 246 sub { 247 cmp_deeply(['d', 'b', 'd'], subsetof('a', 'b', 'c', 'a')); 248 }, 249 { 250 actual_ok => 0, 251 diag => <<'EOM', 252Comparing $data as a SubSet 253Extra: 'd' 254EOM 255 }, 256 "subsetof no" 257 ); 258} 259 260{ 261 check_test( 262 sub { 263 cmp_deeply([1, undef, undef], set(undef, 1, undef)); 264 }, 265 { 266 actual_ok => 1, 267 diag => "", 268 }, 269 "undef warnings" 270 ); 271 272 check_test( 273 sub { 274 cmp_deeply([1, undef], set(1)); 275 }, 276 { 277 actual_ok => 0, 278 diag => <<EOM, 279Comparing \$data as a Set 280Extra: undef 281EOM 282 }, 283 "warnings extra" 284 ); 285} 286