@@ -95,6 +95,12 @@ func TestHash(t *testing.T) {
95
95
{in : tuple {scalars {F64 : float64 (math .NaN ())}, scalars {F64 : float64 (math .NaN ())}}, wantEq : true },
96
96
{in : tuple {scalars {C64 : 32 + 32i }, scalars {C64 : complex (math .Nextafter32 (32 , 0 ), 32 )}}, wantEq : false },
97
97
{in : tuple {scalars {C128 : 64 + 64i }, scalars {C128 : complex (math .Nextafter (64 , 0 ), 64 )}}, wantEq : false },
98
+ {in : tuple {[]int (nil ), []int (nil )}, wantEq : true },
99
+ {in : tuple {[]int {}, []int (nil )}, wantEq : false },
100
+ {in : tuple {[]int {}, []int {}}, wantEq : true },
101
+ {in : tuple {[]string (nil ), []string (nil )}, wantEq : true },
102
+ {in : tuple {[]string {}, []string (nil )}, wantEq : false },
103
+ {in : tuple {[]string {}, []string {}}, wantEq : true },
98
104
{in : tuple {[]appendBytes {{}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }}, []appendBytes {{}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }}}, wantEq : true },
99
105
{in : tuple {[]appendBytes {{}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }}, []appendBytes {{0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }, {}}}, wantEq : false },
100
106
{in : tuple {iface {MyBool (true )}, iface {MyBool (true )}}, wantEq : true },
@@ -413,13 +419,13 @@ func TestGetTypeHasher(t *testing.T) {
413
419
{
414
420
name : "string_slice" ,
415
421
val : []string {"foo" , "bar" },
416
- out : "\x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 bar" ,
422
+ out : "\x01 \ x02\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 bar" ,
417
423
},
418
424
{
419
425
name : "int_slice" ,
420
426
val : []int {1 , 0 , - 1 },
421
- out : "\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xff \xff \xff \xff \xff \xff \xff \xff " ,
422
- out32 : "\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xff \xff \xff \xff " ,
427
+ out : "\x01 \ x03\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xff \xff \xff \xff \xff \xff \xff \xff " ,
428
+ out32 : "\x01 \ x03\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xff \xff \xff \xff " ,
423
429
},
424
430
{
425
431
name : "struct" ,
@@ -454,8 +460,8 @@ func TestGetTypeHasher(t *testing.T) {
454
460
{
455
461
name : "packet_filter" ,
456
462
val : filterRules ,
457
- out : "\x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 *\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.1.3.4/32\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.0.0.0/24\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \n \x00 \x00 \x00 \x00 \x00 \x00 \x00 1.2.3.4/32\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x02 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x02 \x03 \x04 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ,
458
- out32 : "\x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 *\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.1.3.4/32\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.0.0.0/24\x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \n \x00 \x00 \x00 \x00 \x00 \x00 \x00 1.2.3.4/32\x01 \x00 \x00 \x00 \x01 \x00 \x02 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x02 \x03 \x04 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ,
463
+ out : "\x01 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 *\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.1.3.4/32\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.0.0.0/24\x01 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \n \x00 \x00 \x00 \x00 \x00 \x00 \x00 1.2.3.4/32\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x02 \x00 \x01 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x02 \x03 \x04 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 " ,
464
+ out32 : "\x01 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 *\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.1.3.4/32\v \x00 \x00 \x00 \x00 \x00 \x00 \x00 10.0.0.0/24\x01 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \n \x00 \x00 \x00 \x00 \x00 \x00 \x00 1.2.3.4/32\x01 \x00 \x00 \x00 \x01 \x00 \x02 \x00 \x01 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x04 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x02 \x03 \x04 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x03 \x00 \x00 \x00 \x00 \x00 \x00 \x00 foo\x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \v \x00 \x00 \x00 \x00 \x00 \x00 \x00 foooooooooo\x00 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \f \x00 \x00 \x00 \x00 \x00 \x00 \x00 baaaaaarrrrr\x00 \x01 \x00 \x02 \x00 \x00 \x00 " ,
459
465
},
460
466
{
461
467
name : "netip.Addr" ,
@@ -569,7 +575,7 @@ func TestGetTypeHasher(t *testing.T) {
569
575
{
570
576
name : "tailcfg.Node" ,
571
577
val : & tailcfg.Node {},
572
- out : "\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " + u64 ( uint64 (time. Time {}. Unix ())) + u64 ( 0 ) + u32 ( 0 ) + u32 ( 0 ) + " \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " + u64 ( uint64 (time. Time {}. Unix ())) + u32 ( 0 ) + u32 ( 0 ) + " \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ,
578
+ out : "\x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \t n \x88 \xf1 \xff \xff \xff \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \t n \x88 \xf1 \xff \xff \xff \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ,
573
579
},
574
580
}
575
581
for _ , tt := range tests {
@@ -594,6 +600,44 @@ func TestGetTypeHasher(t *testing.T) {
594
600
}
595
601
}
596
602
603
+ func TestSliceCycle (t * testing.T ) {
604
+ type S []S
605
+ c := qt .New (t )
606
+
607
+ a := make (S , 1 ) // cylic graph of 1 node
608
+ a [0 ] = a
609
+ b := make (S , 1 ) // cylic graph of 1 node
610
+ b [0 ] = b
611
+ ha := Hash (& a )
612
+ hb := Hash (& b )
613
+ c .Assert (ha , qt .Equals , hb )
614
+
615
+ c1 := make (S , 1 ) // cyclic graph of 2 nodes
616
+ c2 := make (S , 1 ) // cyclic graph of 2 nodes
617
+ c1 [0 ] = c2
618
+ c2 [0 ] = c1
619
+ hc1 := Hash (& c1 )
620
+ hc2 := Hash (& c2 )
621
+ c .Assert (hc1 , qt .Equals , hc2 )
622
+ c .Assert (ha , qt .Not (qt .Equals ), hc1 )
623
+ c .Assert (hb , qt .Not (qt .Equals ), hc2 )
624
+
625
+ c3 := make (S , 1 ) // graph of 1 node pointing to cyclic graph of 2 nodes
626
+ c3 [0 ] = c1
627
+ hc3 := Hash (& c3 )
628
+ c .Assert (hc1 , qt .Not (qt .Equals ), hc3 )
629
+
630
+ c4 := make (S , 2 ) // cyclic graph of 3 nodes
631
+ c5 := make (S , 2 ) // cyclic graph of 3 nodes
632
+ c4 [0 ] = nil
633
+ c4 [1 ] = c4
634
+ c5 [0 ] = c5
635
+ c5 [1 ] = nil
636
+ hc4 := Hash (& c4 )
637
+ hc5 := Hash (& c5 )
638
+ c .Assert (hc4 , qt .Not (qt .Equals ), hc5 ) // cycle occurs through different indexes
639
+ }
640
+
597
641
func TestMapCycle (t * testing.T ) {
598
642
type M map [string ]M
599
643
c := qt .New (t )
@@ -620,6 +664,16 @@ func TestMapCycle(t *testing.T) {
620
664
c3 ["child" ] = c1
621
665
hc3 := Hash (& c3 )
622
666
c .Assert (hc1 , qt .Not (qt .Equals ), hc3 )
667
+
668
+ c4 := make (M ) // cyclic graph of 3 nodes
669
+ c5 := make (M ) // cyclic graph of 3 nodes
670
+ c4 ["0" ] = nil
671
+ c4 ["1" ] = c4
672
+ c5 ["0" ] = c5
673
+ c5 ["1" ] = nil
674
+ hc4 := Hash (& c4 )
675
+ hc5 := Hash (& c5 )
676
+ c .Assert (hc4 , qt .Not (qt .Equals ), hc5 ) // cycle occurs through different keys
623
677
}
624
678
625
679
func TestPointerCycle (t * testing.T ) {
0 commit comments