@@ -619,12 +619,36 @@ TEST(JSON_key_hash, hash_fooooooooooooooooooooooooooooooo) {
619
619
EXPECT_FALSE (hasher.is_perfect (hash));
620
620
#if defined(__SIZEOF_INT128__)
621
621
EXPECT_EQ (hash.a ,
622
- (__uint128_t {0x0000000000000000 } << 64 ) | 0x00000000000000f5 );
622
+ (__uint128_t {0x0000000000000000 } << 64 ) | 0x00000000000000f6 );
623
623
EXPECT_EQ (hash.b ,
624
624
(__uint128_t {0x0000000000000000 } << 64 ) | 0x0000000000000000 );
625
625
#else
626
626
// 0x20 (length) + 0x66 (f) + 0x6f (o)
627
- EXPECT_EQ (hash.a , 0x00000000000000f5 );
627
+ EXPECT_EQ (hash.a , 0x00000000000000f6 );
628
+ EXPECT_EQ (hash.b , 0x0000000000000000 );
629
+ EXPECT_EQ (hash.c , 0x0000000000000000 );
630
+ EXPECT_EQ (hash.d , 0x0000000000000000 );
631
+ #endif
632
+ }
633
+
634
+ TEST (JSON_key_hash, hash_no_collision) {
635
+ const sourcemeta::core::PropertyHashJSON<sourcemeta::core::JSON::String>
636
+ hasher;
637
+ const sourcemeta::core::JSON::String value{
638
+ " zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
639
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
640
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
641
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz" };
642
+ const auto hash{hasher (value)};
643
+ EXPECT_FALSE (hasher.is_perfect (hash));
644
+ #if defined(__SIZEOF_INT128__)
645
+ EXPECT_EQ (hash.a ,
646
+ (__uint128_t {0x0000000000000000 } << 64 ) | 0x0000000000000003 );
647
+ EXPECT_EQ (hash.b ,
648
+ (__uint128_t {0x0000000000000000 } << 64 ) | 0x0000000000000000 );
649
+ #else
650
+ // 0x10C (length) + 0x7A (z) + 0x7A (z)
651
+ EXPECT_EQ (hash.a , 0x0000000000000003 );
628
652
EXPECT_EQ (hash.b , 0x0000000000000000 );
629
653
EXPECT_EQ (hash.c , 0x0000000000000000 );
630
654
EXPECT_EQ (hash.d , 0x0000000000000000 );
0 commit comments