xref: /aosp_15_r20/external/abseil-cpp/absl/hash/internal/low_level_hash_test.cc (revision 9356374a3709195abf420251b3e825997ff56c0f)
1 // Copyright 2020 The Abseil Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "absl/hash/internal/low_level_hash.h"
16 
17 #include <cinttypes>
18 
19 #include "gmock/gmock.h"
20 #include "gtest/gtest.h"
21 #include "absl/strings/escaping.h"
22 
23 #define UPDATE_GOLDEN 0
24 
25 namespace {
26 
27 static const uint64_t kSalt[5] = {0xa0761d6478bd642f, 0xe7037ed1a0b428dbl,
28                                   0x8ebc6af09c88c6e3, 0x589965cc75374cc3l,
29                                   0x1d8e4e27c47d124f};
30 
TEST(LowLevelHashTest,VerifyGolden)31 TEST(LowLevelHashTest, VerifyGolden) {
32   constexpr size_t kNumGoldenOutputs = 134;
33   static struct {
34     absl::string_view base64_data;
35     uint64_t seed;
36   } cases[] = {
37       {"", uint64_t{0xec42b7ab404b8acb}},
38       {"ICAg", uint64_t{0}},
39       {"YWFhYQ==", uint64_t{0}},
40       {"AQID", uint64_t{0}},
41       {"AQIDBA==", uint64_t{0}},
42       {"dGhpcmRfcGFydHl8d3loYXNofDY0", uint64_t{0}},
43       {"Zw==", uint64_t{0xeeee074043a3ee0f}},
44       {"xmk=", uint64_t{0x857902089c393de}},
45       {"c1H/", uint64_t{0x993df040024ca3af}},
46       {"SuwpzQ==", uint64_t{0xc4e4c2acea740e96}},
47       {"uqvy++M=", uint64_t{0x6a214b3db872d0cf}},
48       {"RnzCVPgb", uint64_t{0x44343db6a89dba4d}},
49       {"6OeNdlouYw==", uint64_t{0x77b5d6d1ae1dd483}},
50       {"M5/JmmYyDbc=", uint64_t{0x89ab8ecb44d221f1}},
51       {"MVijWiVdBRdY", uint64_t{0x60244b17577ca81b}},
52       {"6V7Uq7LNxpu0VA==", uint64_t{0x59a08dcee0717067}},
53       {"EQ6CdEEhPdyHcOk=", uint64_t{0xf5f20db3ade57396}},
54       {"PqFB4fxnPgF+l+rc", uint64_t{0xbf8dee0751ad3efb}},
55       {"a5aPOFwq7LA7+zKvPA==", uint64_t{0x6b7a06b268d63e30}},
56       {"VOwY21wCGv5D+/qqOvs=", uint64_t{0xb8c37f0ae0f54c82}},
57       {"KdHmBTx8lHXYvmGJ+Vy7", uint64_t{0x9fcbed0c38e50eef}},
58       {"qJkPlbHr8bMF7/cA6aE65Q==", uint64_t{0x2af4bade1d8e3a1d}},
59       {"ygvL0EhHZL0fIx6oHHtkxRQ=", uint64_t{0x714e3aa912da2f2c}},
60       {"c1rFXkt5YztwZCQRngncqtSs", uint64_t{0xf5ee75e3cbb82c1c}},
61       {"8hsQrzszzeNQSEcVXLtvIhm6mw==", uint64_t{0x620e7007321b93b9}},
62       {"ffUL4RocfyP4KfikGxO1yk7omDI=", uint64_t{0xc08528cac2e551fc}},
63       {"OOB5TT00vF9Od/rLbAWshiErqhpV", uint64_t{0x6a1debf9cc3ad39}},
64       {"or5wtXM7BFzTNpSzr+Lw5J5PMhVJ/Q==", uint64_t{0x7e0a3c88111fc226}},
65       {"gk6pCHDUsoopVEiaCrzVDhioRKxb844=", uint64_t{0x1301fef15df39edb}},
66       {"TNctmwlC5QbEM6/No4R/La3UdkfeMhzs", uint64_t{0x64e181f3d5817ab}},
67       {"SsQw9iAjhWz7sgcE9OwLuSC6hsM+BfHs2Q==", uint64_t{0xafafc44961078ecb}},
68       {"ZzO3mVCj4xTT2TT3XqDyEKj2BZQBvrS8RHg=", uint64_t{0x4f7bb45549250094}},
69       {"+klp5iPQGtppan5MflEls0iEUzqU+zGZkDJX", uint64_t{0xa30061abaa2818c}},
70       {"RO6bvOnlJc8I9eniXlNgqtKy0IX6VNg16NRmgg==",
71        uint64_t{0xd902ee3e44a5705f}},
72       {"ZJjZqId1ZXBaij9igClE3nyliU5XWdNRrayGlYA=", uint64_t{0x316d36da516f583}},
73       {"7BfkhfGMDGbxfMB8uyL85GbaYQtjr2K8g7RpLzr/",
74        uint64_t{0x402d83f9f834f616}},
75       {"rycWk6wHH7htETQtje9PidS2YzXBx+Qkg2fY7ZYS7A==",
76        uint64_t{0x9c604164c016b72c}},
77       {"RTkC2OUK+J13CdGllsH0H5WqgspsSa6QzRZouqx6pvI=",
78        uint64_t{0x3f4507e01f9e73ba}},
79       {"tKjKmbLCNyrLCM9hycOAXm4DKNpM12oZ7dLTmUx5iwAi",
80        uint64_t{0xc3fe0d5be8d2c7c7}},
81       {"VprUGNH+5NnNRaORxgH/ySrZFQFDL+4VAodhfBNinmn8cg==",
82        uint64_t{0x531858a40bfa7ea1}},
83       {"gc1xZaY+q0nPcUvOOnWnT3bqfmT/geth/f7Dm2e/DemMfk4=",
84        uint64_t{0x86689478a7a7e8fa}},
85       {"Mr35fIxqx1ukPAL0su1yFuzzAU3wABCLZ8+ZUFsXn47UmAph",
86        uint64_t{0x4ec948b8e7f27288}},
87       {"A9G8pw2+m7+rDtWYAdbl8tb2fT7FFo4hLi2vAsa5Y8mKH3CX3g==",
88        uint64_t{0xce46c7213c10032}},
89       {"DFaJGishGwEHDdj9ixbCoaTjz9KS0phLNWHVVdFsM93CvPft3hM=",
90        uint64_t{0xf63e96ee6f32a8b6}},
91       {"7+Ugx+Kr3aRNgYgcUxru62YkTDt5Hqis+2po81hGBkcrJg4N0uuy",
92        uint64_t{0x1cfe85e65fc5225}},
93       {"H2w6O8BUKqu6Tvj2xxaecxEI2wRgIgqnTTG1WwOgDSINR13Nm4d4Vg==",
94        uint64_t{0x45c474f1cee1d2e8}},
95       {"1XBMnIbqD5jy65xTDaf6WtiwtdtQwv1dCVoqpeKj+7cTR1SaMWMyI04=",
96        uint64_t{0x6e024e14015f329c}},
97       {"znZbdXG2TSFrKHEuJc83gPncYpzXGbAebUpP0XxzH0rpe8BaMQ17nDbt",
98        uint64_t{0x760c40502103ae1c}},
99       {"ylu8Atu13j1StlcC1MRMJJXIl7USgDDS22HgVv0WQ8hx/8pNtaiKB17hCQ==",
100        uint64_t{0x17fd05c3c560c320}},
101       {"M6ZVVzsd7vAvbiACSYHioH/440dp4xG2mLlBnxgiqEvI/aIEGpD0Sf4VS0g=",
102        uint64_t{0x8b34200a6f8e90d9}},
103       {"li3oFSXLXI+ubUVGJ4blP6mNinGKLHWkvGruun85AhVn6iuMtocbZPVhqxzn",
104        uint64_t{0x6be89e50818bdf69}},
105       {"kFuQHuUCqBF3Tc3hO4dgdIp223ShaCoog48d5Do5zMqUXOh5XpGK1t5XtxnfGA==",
106        uint64_t{0xfb389773315b47d8}},
107       {"jWmOad0v0QhXVJd1OdGuBZtDYYS8wBVHlvOeTQx9ZZnm8wLEItPMeihj72E0nWY=",
108        uint64_t{0x4f2512a23f61efee}},
109       {"z+DHU52HaOQdW4JrZwDQAebEA6rm13Zg/9lPYA3txt3NjTBqFZlOMvTRnVzRbl23",
110        uint64_t{0x59ccd92fc16c6fda}},
111       {"MmBiGDfYeTayyJa/tVycg+rN7f9mPDFaDc+23j0TlW9094er0ADigsl4QX7V3gG/qw==",
112        uint64_t{0x25c5a7f5bd330919}},
113       {"774RK+9rOL4iFvs1q2qpo/JVc/I39buvNjqEFDtDvyoB0FXxPI2vXqOrk08VPfIHkmU=",
114        uint64_t{0x51df4174d34c97d7}},
115       {"+slatXiQ7/2lK0BkVUI1qzNxOOLP3I1iK6OfHaoxgqT63FpzbElwEXSwdsryq3UlHK0I",
116        uint64_t{0x80ce6d76f89cb57}},
117       {"64mVTbQ47dHjHlOHGS/hjJwr/"
118        "K2frCNpn87exOqMzNUVYiPKmhCbfS7vBUce5tO6Ec9osQ==",
119        uint64_t{0x20961c911965f684}},
120       {"fIsaG1r530SFrBqaDj1kqE0AJnvvK8MNEZbII2Yw1OK77v0V59xabIh0B5axaz/"
121        "+a2V5WpA=",
122        uint64_t{0x4e5b926ec83868e7}},
123       {"PGih0zDEOWCYGxuHGDFu9Ivbff/"
124        "iE7BNUq65tycTR2R76TerrXALRosnzaNYO5fjFhTi+CiS",
125        uint64_t{0x3927b30b922eecef}},
126       {"RnpA/"
127        "zJnEnnLjmICORByRVb9bCOgxF44p3VMiW10G7PvW7IhwsWajlP9kIwNA9FjAD2GoQHk2Q="
128        "=",
129        uint64_t{0xbd0291284a49b61c}},
130       {"qFklMceaTHqJpy2qavJE+EVBiNFOi6OxjOA3LeIcBop1K7w8xQi3TrDk+"
131        "BrWPRIbfprszSaPfrI=",
132        uint64_t{0x73a77c575bcc956}},
133       {"cLbfUtLl3EcQmITWoTskUR8da/VafRDYF/ylPYwk7/"
134        "zazk6ssyrzxMN3mmSyvrXR2yDGNZ3WDrTT",
135        uint64_t{0x766a0e2ade6d09a6}},
136       {"s/"
137        "Jf1+"
138        "FbsbCpXWPTUSeWyMH6e4CvTFvPE5Fs6Z8hvFITGyr0dtukHzkI84oviVLxhM1xMxrMAy1db"
139        "w==",
140        uint64_t{0x2599f4f905115869}},
141       {"FvyQ00+j7nmYZVQ8hI1Edxd0AWplhTfWuFGiu34AK5X8u2hLX1bE97sZM0CmeLe+"
142        "7LgoUT1fJ/axybE=",
143        uint64_t{0xd8256e5444d21e53}},
144       {"L8ncxMaYLBH3g9buPu8hfpWZNlOF7nvWLNv9IozH07uQsIBWSKxoPy8+"
145        "LW4tTuzC6CIWbRGRRD1sQV/4",
146        uint64_t{0xf664a91333fb8dfd}},
147       {"CDK0meI07yrgV2kQlZZ+"
148        "wuVqhc2NmzqeLH7bmcA6kchsRWFPeVF5Wqjjaj556ABeUoUr3yBmfU3kWOakkg==",
149        uint64_t{0x9625b859be372cd1}},
150       {"d23/vc5ONh/"
151        "HkMiq+gYk4gaCNYyuFKwUkvn46t+dfVcKfBTYykr4kdvAPNXGYLjM4u1YkAEFpJP+"
152        "nX7eOvs=",
153        uint64_t{0x7b99940782e29898}},
154       {"NUR3SRxBkxTSbtQORJpu/GdR6b/h6sSGfsMj/KFd99ahbh+9r7LSgSGmkGVB/"
155        "mGoT0pnMTQst7Lv2q6QN6Vm",
156        uint64_t{0x4fe12fa5383b51a8}},
157       {"2BOFlcI3Z0RYDtS9T9Ie9yJoXlOdigpPeeT+CRujb/"
158        "O39Ih5LPC9hP6RQk1kYESGyaLZZi3jtabHs7DiVx/VDg==",
159        uint64_t{0xe2ccb09ac0f5b4b6}},
160       {"FF2HQE1FxEvWBpg6Z9zAMH+Zlqx8S1JD/"
161        "wIlViL6ZDZY63alMDrxB0GJQahmAtjlm26RGLnjW7jmgQ4Ie3I+014=",
162        uint64_t{0x7d0a37adbd7b753b}},
163       {"tHmO7mqVL/PX11nZrz50Hc+M17Poj5lpnqHkEN+4bpMx/"
164        "YGbkrGOaYjoQjgmt1X2QyypK7xClFrjeWrCMdlVYtbW",
165        uint64_t{0xd3ae96ef9f7185f2}},
166       {"/WiHi9IQcxRImsudkA/KOTqGe8/"
167        "gXkhKIHkjddv5S9hi02M049dIK3EUyAEjkjpdGLUs+BN0QzPtZqjIYPOgwsYE9g==",
168        uint64_t{0x4fb88ea63f79a0d8}},
169       {"qds+1ExSnU11L4fTSDz/QE90g4Jh6ioqSh3KDOTOAo2pQGL1k/"
170        "9CCC7J23YF27dUTzrWsCQA2m4epXoCc3yPHb3xElA=",
171        uint64_t{0xed564e259bb5ebe9}},
172       {"8FVYHx40lSQPTHheh08Oq0/"
173        "pGm2OlG8BEf8ezvAxHuGGdgCkqpXIueJBF2mQJhTfDy5NncO8ntS7vaKs7sCNdDaNGOEi",
174        uint64_t{0x3e3256b60c428000}},
175       {"4ZoEIrJtstiCkeew3oRzmyJHVt/pAs2pj0HgHFrBPztbQ10NsQ/"
176        "lM6DM439QVxpznnBSiHMgMQJhER+70l72LqFTO1JiIQ==",
177        uint64_t{0xfb05bad59ec8705}},
178       {"hQPtaYI+wJyxXgwD5n8jGIKFKaFA/"
179        "P83KqCKZfPthnjwdOFysqEOYwAaZuaaiv4cDyi9TyS8hk5cEbNP/jrI7q6pYGBLbsM=",
180        uint64_t{0xafdc251dbf97b5f8}},
181       {"S4gpMSKzMD7CWPsSfLeYyhSpfWOntyuVZdX1xSBjiGvsspwOZcxNKCRIOqAA0moUfOh3I5+"
182        "juQV4rsqYElMD/gWfDGpsWZKQ",
183        uint64_t{0x10ec9c92ddb5dcbc}},
184       {"oswxop+"
185        "bthuDLT4j0PcoSKby4LhF47ZKg8K17xxHf74UsGCzTBbOz0MM8hQEGlyqDT1iUiAYnaPaUp"
186        "L2mRK0rcIUYA4qLt5uOw==",
187        uint64_t{0x9a767d5822c7dac4}},
188       {"0II/"
189        "697p+"
190        "BtLSjxj5989OXI004TogEb94VUnDzOVSgMXie72cuYRvTFNIBgtXlKfkiUjeqVpd4a+"
191        "n5bxNOD1TGrjQtzKU5r7obo=",
192        uint64_t{0xee46254080d6e2db}},
193       {"E84YZW2qipAlMPmctrg7TKlwLZ68l4L+c0xRDUfyyFrA4MAti0q9sHq3TDFviH0Y+"
194        "Kq3tEE5srWFA8LM9oomtmvm5PYxoaarWPLc",
195        uint64_t{0xbbb669588d8bf398}},
196       {"x3pa4HIElyZG0Nj7Vdy9IdJIR4izLmypXw5PCmZB5y68QQ4uRaVVi3UthsoJROvbjDJkP2D"
197        "Q6L/eN8pFeLFzNPKBYzcmuMOb5Ull7w==",
198        uint64_t{0xdc2afaa529beef44}},
199       {"jVDKGYIuWOP/"
200        "QKLdd2wi8B2VJA8Wh0c8PwrXJVM8FOGM3voPDVPyDJOU6QsBDPseoR8uuKd19OZ/"
201        "zAvSCB+zlf6upAsBlheUKgCfKww=",
202        uint64_t{0xf1f67391d45013a8}},
203       {"mkquunhmYe1aR2wmUz4vcvLEcKBoe6H+kjUok9VUn2+eTSkWs4oDDtJvNCWtY5efJwg/"
204        "j4PgjRYWtqnrCkhaqJaEvkkOwVfgMIwF3e+d",
205        uint64_t{0x16fce2b8c65a3429}},
206       {"fRelvKYonTQ+s+rnnvQw+JzGfFoPixtna0vzcSjiDqX5s2Kg2//"
207        "UGrK+AVCyMUhO98WoB1DDbrsOYSw2QzrcPe0+3ck9sePvb+Q/IRaHbw==",
208        uint64_t{0xf4b096699f49fe67}},
209       {"DUwXFJzagljo44QeJ7/"
210        "6ZKw4QXV18lhkYT2jglMr8WB3CHUU4vdsytvw6AKv42ZcG6fRkZkq9fpnmXy6xG0aO3WPT1"
211        "eHuyFirAlkW+zKtwg=",
212        uint64_t{0xca584c4bc8198682}},
213       {"cYmZCrOOBBongNTr7e4nYn52uQUy2mfe48s50JXx2AZ6cRAt/"
214        "xRHJ5QbEoEJOeOHsJyM4nbzwFm++SlT6gFZZHJpkXJ92JkR86uS/eV1hJUR",
215        uint64_t{0xed269fc3818b6aad}},
216       {"EXeHBDfhwzAKFhsMcH9+2RHwV+mJaN01+9oacF6vgm8mCXRd6jeN9U2oAb0of5c5cO4i+"
217        "Vb/LlHZSMI490SnHU0bejhSCC2gsC5d2K30ER3iNA==",
218        uint64_t{0x33f253cbb8fe66a8}},
219       {"FzkzRYoNjkxFhZDso94IHRZaJUP61nFYrh5MwDwv9FNoJ5jyNCY/"
220        "eazPZk+tbmzDyJIGw2h3GxaWZ9bSlsol/vK98SbkMKCQ/wbfrXRLcDzdd/8=",
221        uint64_t{0xd0b76b2c1523d99c}},
222       {"Re4aXISCMlYY/XsX7zkIFR04ta03u4zkL9dVbLXMa/q6hlY/CImVIIYRN3VKP4pnd0AUr/"
223        "ugkyt36JcstAInb4h9rpAGQ7GMVOgBniiMBZ/MGU7H",
224        uint64_t{0xfd28f0811a2a237f}},
225       {"ueLyMcqJXX+MhO4UApylCN9WlTQ+"
226        "ltJmItgG7vFUtqs2qNwBMjmAvr5u0sAKd8jpzV0dDPTwchbIeAW5zbtkA2NABJV6hFM48ib"
227        "4/J3A5mseA3cS8w==",
228        uint64_t{0x6261fb136482e84}},
229       {"6Si7Yi11L+jZMkwaN+GUuzXMrlvEqviEkGOilNq0h8TdQyYKuFXzkYc/"
230        "q74gP3pVCyiwz9KpVGMM9vfnq36riMHRknkmhQutxLZs5fbmOgEO69HglCU=",
231        uint64_t{0x458efc750bca7c3a}},
232       {"Q6AbOofGuTJOegPh9Clm/"
233        "9crtUMQqylKrTc1fhfJo1tqvpXxhU4k08kntL1RG7woRnFrVh2UoMrL1kjin+s9CanT+"
234        "y4hHwLqRranl9FjvxfVKm3yvg68",
235        uint64_t{0xa7e69ff84e5e7c27}},
236       {"ieQEbIPvqY2YfIjHnqfJiO1/MIVRk0RoaG/WWi3kFrfIGiNLCczYoklgaecHMm/"
237        "1sZ96AjO+a5stQfZbJQwS7Sc1ODABEdJKcTsxeW2hbh9A6CFzpowP1A==",
238        uint64_t{0x3c59bfd0c29efe9e}},
239       {"zQUv8hFB3zh2GGl3KTvCmnfzE+"
240        "SUgQPVaSVIELFX5H9cE3FuVFGmymkPQZJLAyzC90Cmi8GqYCvPqTuAAB//"
241        "XTJxy4bCcVArgZG9zJXpjowpNBfr3ngWrSE=",
242        uint64_t{0x10befacc6afd298d}},
243       {"US4hcC1+op5JKGC7eIs8CUgInjKWKlvKQkapulxW262E/"
244        "B2ye79QxOexf188u2mFwwe3WTISJHRZzS61IwljqAWAWoBAqkUnW8SHmIDwHUP31J0p5sGd"
245        "P47L",
246        uint64_t{0x41d5320b0a38efa7}},
247       {"9bHUWFna2LNaGF6fQLlkx1Hkt24nrkLE2CmFdWgTQV3FFbUe747SSqYw6ebpTa07MWSpWRP"
248        "sHesVo2B9tqHbe7eQmqYebPDFnNqrhSdZwFm9arLQVs+7a3Ic6A==",
249        uint64_t{0x58db1c7450fe17f3}},
250       {"Kb3DpHRUPhtyqgs3RuXjzA08jGb59hjKTOeFt1qhoINfYyfTt2buKhD6YVffRCPsgK9SeqZ"
251        "qRPJSyaqsa0ovyq1WnWW8jI/NhvAkZTVHUrX2pC+cD3OPYT05Dag=",
252        uint64_t{0x6098c055a335b7a6}},
253       {"gzxyMJIPlU+bJBwhFUCHSofZ/"
254        "319LxqMoqnt3+L6h2U2+ZXJCSsYpE80xmR0Ta77Jq54o92SMH87HV8dGOaCTuAYF+"
255        "lDL42SY1P316Cl0sZTS2ow3ZqwGbcPNs/1",
256        uint64_t{0x1bbacec67845a801}},
257       {"uR7V0TW+FGVMpsifnaBAQ3IGlr1wx5sKd7TChuqRe6OvUXTlD4hKWy8S+"
258        "8yyOw8lQabism19vOQxfmocEOW/"
259        "vzY0pEa87qHrAZy4s9fH2Bltu8vaOIe+agYohhYORQ==",
260        uint64_t{0xc419cfc7442190}},
261       {"1UR5eoo2aCwhacjZHaCh9bkOsITp6QunUxHQ2SfeHv0imHetzt/"
262        "Z70mhyWZBalv6eAx+YfWKCUib2SHDtz/"
263        "A2dc3hqUWX5VfAV7FQsghPUAtu6IiRatq4YSLpDvKZBQ=",
264        uint64_t{0xc95e510d94ba270c}},
265       {"opubR7H63BH7OtY+Avd7QyQ25UZ8kLBdFDsBTwZlY6gA/"
266        "u+x+"
267        "czC9AaZMgmQrUy15DH7YMGsvdXnviTtI4eVI4aF1H9Rl3NXMKZgwFOsdTfdcZeeHVRzBBKX"
268        "8jUfh1il",
269        uint64_t{0xff1ae05c98089c3f}},
270       {"DC0kXcSXtfQ9FbSRwirIn5tgPri0sbzHSa78aDZVDUKCMaBGyFU6BmrulywYX8yzvwprdLs"
271        "oOwTWN2wMjHlPDqrvVHNEjnmufRDblW+nSS+xtKNs3N5xsxXdv6JXDrAB/Q==",
272        uint64_t{0x90c02b8dceced493}},
273       {"BXRBk+3wEP3Lpm1y75wjoz+PgB0AMzLe8tQ1AYU2/"
274        "oqrQB2YMC6W+9QDbcOfkGbeH+b7IBkt/"
275        "gwCMw2HaQsRFEsurXtcQ3YwRuPz5XNaw5NAvrNa67Fm7eRzdE1+hWLKtA8=",
276        uint64_t{0x9f8a76697ab1aa36}},
277       {"RRBSvEGYnzR9E45Aps/+WSnpCo/X7gJLO4DRnUqFrJCV/kzWlusLE/"
278        "6ZU6RoUf2ROwcgEvUiXTGjLs7ts3t9SXnJHxC1KiOzxHdYLMhVvgNd3hVSAXODpKFSkVXND"
279        "55G2L1W",
280        uint64_t{0x6ba1bf3d811a531d}},
281       {"jeh6Qazxmdi57pa9S3XSnnZFIRrnc6s8QLrah5OX3SB/V2ErSPoEAumavzQPkdKF1/"
282        "SfvmdL+qgF1C+Yawy562QaFqwVGq7+tW0yxP8FStb56ZRgNI4IOmI30s1Ei7iops9Uuw==",
283        uint64_t{0x6a418974109c67b4}},
284       {"6QO5nnDrY2/"
285        "wrUXpltlKy2dSBcmK15fOY092CR7KxAjNfaY+"
286        "aAmtWbbzQk3MjBg03x39afSUN1fkrWACdyQKRaGxgwq6MGNxI6W+8DLWJBHzIXrntrE/"
287        "ml6fnNXEpxplWJ1vEs4=",
288        uint64_t{0x8472f1c2b3d230a3}},
289       {"0oPxeEHhqhcFuwonNfLd5jF3RNATGZS6NPoS0WklnzyokbTqcl4BeBkMn07+fDQv83j/"
290        "BpGUwcWO05f3+DYzocfnizpFjLJemFGsls3gxcBYxcbqWYev51tG3lN9EvRE+X9+Pwww",
291        uint64_t{0x5e06068f884e73a7}},
292       {"naSBSjtOKgAOg8XVbR5cHAW3Y+QL4Pb/JO9/"
293        "oy6L08wvVRZqo0BrssMwhzBP401Um7A4ppAupbQeJFdMrysY34AuSSNvtNUy5VxjNECwiNt"
294        "gwYHw7yakDUv8WvonctmnoSPKENegQg==",
295        uint64_t{0x55290b1a8f170f59}},
296       {"vPyl8DxVeRe1OpilKb9KNwpGkQRtA94UpAHetNh+"
297        "95V7nIW38v7PpzhnTWIml5kw3So1Si0TXtIUPIbsu32BNhoH7QwFvLM+"
298        "JACgSpc5e3RjsL6Qwxxi11npwxRmRUqATDeMUfRAjxg=",
299        uint64_t{0x5501cfd83dfe706a}},
300       {"QC9i2GjdTMuNC1xQJ74ngKfrlA4w3o58FhvNCltdIpuMhHP1YsDA78scQPLbZ3OCUgeQguY"
301        "f/vw6zAaVKSgwtaykqg5ka/4vhz4hYqWU5ficdXqClHl+zkWEY26slCNYOM5nnDlly8Cj",
302        uint64_t{0xe43ed13d13a66990}},
303       {"7CNIgQhAHX27nxI0HeB5oUTnTdgKpRDYDKwRcXfSFGP1XeT9nQF6WKCMjL1tBV6x7KuJ91G"
304        "Zz11F4c+8s+MfqEAEpd4FHzamrMNjGcjCyrVtU6y+7HscMVzr7Q/"
305        "ODLcPEFztFnwjvCjmHw==",
306        uint64_t{0xdf43bc375cf5283f}},
307       {"Qa/hC2RPXhANSospe+gUaPfjdK/yhQvfm4cCV6/pdvCYWPv8p1kMtKOX3h5/"
308        "8oZ31fsmx4Axphu5qXJokuhZKkBUJueuMpxRyXpwSWz2wELx5glxF7CM0Fn+"
309        "OevnkhUn5jsPlG2r5jYlVn8=",
310        uint64_t{0x8112b806d288d7b5}},
311       {"kUw/0z4l3a89jTwN5jpG0SHY5km/"
312        "IVhTjgM5xCiPRLncg40aqWrJ5vcF891AOq5hEpSq0bUCJUMFXgct7kvnys905HjerV7Vs1G"
313        "y84tgVJ70/2+pAZTsB/PzNOE/G6sOj4+GbTzkQu819OLB",
314        uint64_t{0xd52a18abb001cb46}},
315       {"VDdfSDbO8Tdj3T5W0XM3EI7iHh5xpIutiM6dvcJ/fhe23V/srFEkDy5iZf/"
316        "VnA9kfi2C79ENnFnbOReeuZW1b3MUXB9lgC6U4pOTuC+"
317        "jHK3Qnpyiqzj7h3ISJSuo2pob7vY6VHZo6Fn7exEqHg==",
318        uint64_t{0xe12b76a2433a1236}},
319       {"Ldfvy3ORdquM/R2fIkhH/ONi69mcP1AEJ6n/"
320        "oropwecAsLJzQSgezSY8bEiEs0VnFTBBsW+RtZY6tDj03fnb3amNUOq1b7jbqyQkL9hpl+"
321        "2Z2J8IaVSeownWl+bQcsR5/xRktIMckC5AtF4YHfU=",
322        uint64_t{0x175bf7319cf1fa00}},
323       {"BrbNpb42+"
324        "VzZAjJw6QLirXzhweCVRfwlczzZ0VX2xluskwBqyfnGovz5EuX79JJ31VNXa5hTkAyQat3l"
325        "YKRADTdAdwE5PqM1N7YaMqqsqoAAAeuYVXuk5eWCykYmClNdSspegwgCuT+403JigBzi",
326        uint64_t{0xd63d57b3f67525ae}},
327       {"gB3NGHJJvVcuPyF0ZSvHwnWSIfmaI7La24VMPQVoIIWF7Z74NltPZZpx2f+cocESM+"
328        "ILzQW9p+BC8x5IWz7N4Str2WLGKMdgmaBfNkEhSHQDU0IJEOnpUt0HmjhFaBlx0/"
329        "LTmhua+rQ6Wup8ezLwfg==",
330        uint64_t{0x933faea858832b73}},
331       {"hTKHlRxx6Pl4gjG+6ksvvj0CWFicUg3WrPdSJypDpq91LUWRni2KF6+"
332        "81ZoHBFhEBrCdogKqeK+hy9bLDnx7g6rAFUjtn1+cWzQ2YjiOpz4+"
333        "ROBB7lnwjyTGWzJD1rXtlso1g2qVH8XJVigC5M9AIxM=",
334        uint64_t{0x53d061e5f8e7c04f}},
335       {"IWQBelSQnhrr0F3BhUpXUIDauhX6f95Qp+A0diFXiUK7irwPG1oqBiqHyK/SH/"
336        "9S+"
337        "rln9DlFROAmeFdH0OCJi2tFm4afxYzJTFR4HnR4cG4x12JqHaZLQx6iiu6CE3rtWBVz99oA"
338        "wCZUOEXIsLU24o2Y",
339        uint64_t{0xdb4124556dd515e0}},
340       {"TKo+l+"
341        "1dOXdLvIrFqeLaHdm0HZnbcdEgOoLVcGRiCbAMR0j5pIFw8D36tefckAS1RCFOH5IgP8yiF"
342        "T0Gd0a2hI3+"
343        "fTKA7iK96NekxWeoeqzJyctc6QsoiyBlkZerRxs5RplrxoeNg29kKDTM0K94mnhD9g==",
344        uint64_t{0x4fb31a0dd681ee71}},
345       {"YU4e7G6EfQYvxCFoCrrT0EFgVLHFfOWRTJQJ5gxM3G2b+"
346        "1kJf9YPrpsxF6Xr6nYtS8reEEbDoZJYqnlk9lXSkVArm88Cqn6d25VCx3+"
347        "49MqC0trIlXtb7SXUUhwpJK16T0hJUfPH7s5cMZXc6YmmbFuBNPE=",
348        uint64_t{0x27cc72eefa138e4c}},
349       {"/I/"
350        "eImMwPo1U6wekNFD1Jxjk9XQVi1D+"
351        "FPdqcHifYXQuP5aScNQfxMAmaPR2XhuOQhADV5tTVbBKwCDCX4E3jcDNHzCiPvViZF1W27t"
352        "xaf2BbFQdwKrNCmrtzcluBFYu0XZfc7RU1RmxK/RtnF1qHsq/O4pp",
353        uint64_t{0x44bc2dfba4bd3ced}},
354       {"CJTT9WGcY2XykTdo8KodRIA29qsqY0iHzWZRjKHb9alwyJ7RZAE3V5Juv4MY3MeYEr1EPCC"
355        "MxO7yFXqT8XA8YTjaMp3bafRt17Pw8JC4iKJ1zN+WWKOESrj+"
356        "3aluGQqn8z1EzqY4PH7rLG575PYeWsP98BugdA==",
357        uint64_t{0x242da1e3a439bed8}},
358       {"ZlhyQwLhXQyIUEnMH/"
359        "AEW27vh9xrbNKJxpWGtrEmKhd+nFqAfbeNBQjW0SfG1YI0xQkQMHXjuTt4P/"
360        "EpZRtA47ibZDVS8TtaxwyBjuIDwqcN09eCtpC+Ls+"
361        "vWDTLmBeDM3u4hmzz4DQAYsLiZYSJcldg9Q3wszw=",
362        uint64_t{0xdc559c746e35c139}},
363       {"v2KU8y0sCrBghmnm8lzGJlwo6D6ObccAxCf10heoDtYLosk4ztTpLlpSFEyu23MLA1tJkcg"
364        "Rko04h19QMG0mOw/"
365        "wc93EXAweriBqXfvdaP85sZABwiKO+6rtS9pacRVpYYhHJeVTQ5NzrvBvi1huxAr+"
366        "xswhVMfL",
367        uint64_t{0xd0b0350275b9989}},
368       {"QhKlnIS6BuVCTQsnoE67E/"
369        "yrgogE8EwO7xLaEGei26m0gEU4OksefJgppDh3X0x0Cs78Dr9IHK5b977CmZlrTRmwhlP8p"
370        "M+UzXPNRNIZuN3ntOum/QhUWP8SGpirheXENWsXMQ/"
371        "nxtxakyEtrNkKk471Oov9juP8oQ==",
372        uint64_t{0xb04489e41d17730c}},
373       {"/ZRMgnoRt+Uo6fUPr9FqQvKX7syhgVqWu+"
374        "WUSsiQ68UlN0efSP6Eced5gJZL6tg9gcYJIkhjuQNITU0Q3TjVAnAcobgbJikCn6qZ6pRxK"
375        "BY4MTiAlfGD3T7R7hwJwx554MAy++Zb/YUFlnCaCJiwQMnowF7aQzwYFCo=",
376        uint64_t{0x2217285eb4572156}},
377       {"NB7tU5fNE8nI+SXGfipc7sRkhnSkUF1krjeo6k+8FITaAtdyz+"
378        "o7mONgXmGLulBPH9bEwyYhKNVY0L+njNQrZ9YC2aXsFD3PdZsxAFaBT3VXEzh+"
379        "NGBTjDASNL3mXyS8Yv1iThGfHoY7T4aR0NYGJ+k+pR6f+KrPC96M",
380        uint64_t{0x12c2e8e68aede73b}},
381       {"8T6wrqCtEO6/rwxF6lvMeyuigVOLwPipX/FULvwyu+1wa5sQGav/"
382        "2FsLHUVn6cGSi0LlFwLewGHPFJDLR0u4t7ZUyM//"
383        "x6da0sWgOa5hzDqjsVGmjxEHXiaXKW3i4iSZNuxoNbMQkIbVML+"
384        "DkYu9ND0O2swg4itGeVSzXA==",
385        uint64_t{0x4d612125bdc4fd00}},
386       {"Ntf1bMRdondtMv1CYr3G80iDJ4WSAlKy5H34XdGruQiCrnRGDBa+"
387        "eUi7vKp4gp3BBcVGl8eYSasVQQjn7MLvb3BjtXx6c/"
388        "bCL7JtpzQKaDnPr9GWRxpBXVxKREgMM7d8lm35EODv0w+"
389        "hQLfVSh8OGs7fsBb68nNWPLeeSOo=",
390        uint64_t{0x81826b553954464e}},
391       {"VsSAw72Ro6xks02kaiLuiTEIWBC5bgqr4WDnmP8vglXzAhixk7td926rm9jNimL+"
392        "kroPSygZ9gl63aF5DCPOACXmsbmhDrAQuUzoh9ZKhWgElLQsrqo1KIjWoZT5b5QfVUXY9lS"
393        "IBg3U75SqORoTPq7HalxxoIT5diWOcJQi",
394        uint64_t{0xc2e5d345dc0ddd2d}},
395       {"j+loZ+C87+"
396        "bJxNVebg94gU0mSLeDulcHs84tQT7BZM2rzDSLiCNxUedHr1ZWJ9ejTiBa0dqy2I2ABc++"
397        "xzOLcv+//YfibtjKtYggC6/3rv0XCc7xu6d/"
398        "O6xO+XOBhOWAQ+IHJVHf7wZnDxIXB8AUHsnjEISKj7823biqXjyP3g==",
399        uint64_t{0x3da6830a9e32631e}},
400       {"f3LlpcPElMkspNtDq5xXyWU62erEaKn7RWKlo540gR6mZsNpK1czV/"
401        "sOmqaq8XAQLEn68LKj6/"
402        "cFkJukxRzCa4OF1a7cCAXYFp9+wZDu0bw4y63qbpjhdCl8GO6Z2lkcXy7KOzbPE01ukg7+"
403        "gN+7uKpoohgAhIwpAKQXmX5xtd0=",
404        uint64_t{0xc9ae5c8759b4877a}},
405   };
406 
407 #if defined(ABSL_IS_BIG_ENDIAN)
408   constexpr uint64_t kGolden[kNumGoldenOutputs] = {
409       0x4c34aacf38f6eee4, 0x88b1366815e50b88, 0x1a36bd0c6150fb9c,
410       0xa783aba8a67366c7, 0x5e4a92123ae874f2, 0x0cc9ecf27067ee9a,
411       0xbe77aa94940527f9, 0x7ea5c12f2669fe31, 0xa33eed8737d946b9,
412       0x310aec5b1340bb36, 0x354e400861c5d8ff, 0x15be98166adcf42f,
413       0xc51910b62a90ae51, 0x539d47fc7fdf6a1f, 0x3ebba9daa46eef93,
414       0xd96bcd3a9113c17f, 0xc78eaf6256ded15a, 0x98902ed321c2f0d9,
415       0x75a4ac96414b954a, 0x2cb90e00a39e307b, 0x46539574626c3637,
416       0x186ec89a2be3ff45, 0x972a3bf7531519d2, 0xa14df0d25922364b,
417       0xa351e19d22752109, 0x08bd311d8fed4f82, 0xea2b52ddc6af54f9,
418       0x5f20549941338336, 0xd43b07422dc2782e, 0x377c68e2acda4835,
419       0x1b31a0a663b1d7b3, 0x7388ba5d68058a1a, 0xe382794ea816f032,
420       0xd4c3fe7889276ee0, 0x2833030545582ea9, 0x554d32a55e55df32,
421       0x8d6d33d7e17b424d, 0xe51a193d03ae1e34, 0xabb6a80835bd66b3,
422       0x0e4ba5293f9ce9b7, 0x1ebd8642cb762cdf, 0xcb54b555850888ee,
423       0x1e4195e4717c701f, 0x6235a13937f6532a, 0xd460960741e845c0,
424       0x2a72168a2d6af7b1, 0x6be38fbbfc5b17de, 0x4ee97cffa0d0fb39,
425       0xfdf1119ad5e71a55, 0x0dff7f66b3070727, 0x812d791d6ed62744,
426       0x60962919074b70b8, 0x956fa5c7d6872547, 0xee892daa58aae597,
427       0xeeda546e998ee369, 0x454481f5eb9b1fa8, 0x1054394634c98b1b,
428       0x55bb425415f591fb, 0x9601fa97416232c4, 0xd7a18506519daad7,
429       0x90935cb5de039acf, 0xe64054c5146ed359, 0xe5b323fb1e866c09,
430       0x10a472555f5ba1bc, 0xe3c0cd57d26e0972, 0x7ca3db7c121da3e8,
431       0x7004a89c800bb466, 0x865f69c1a1ff7f39, 0xbe0edd48f0cf2b99,
432       0x10e5e4ba3cc400f5, 0xafc2b91a220eef50, 0x6f04a259289b24f1,
433       0x2179a8070e880ef0, 0xd6a9a3d023a740c2, 0x96e6d7954755d9b8,
434       0xc8e4bddecce5af9f, 0x93941f0fbc724c92, 0xbef5fb15bf76a479,
435       0x534dca8f5da86529, 0x70789790feec116b, 0x2a296e167eea1fe9,
436       0x54cb1efd2a3ec7ea, 0x357b43897dfeb9f7, 0xd1eda89bc7ff89d3,
437       0x434f2e10cbb83c98, 0xeec4cdac46ca69ce, 0xd46aafd52a303206,
438       0x4bf05968ff50a5c9, 0x71c533747a6292df, 0xa40bd0d16a36118c,
439       0x597b4ee310c395ab, 0xc5b3e3e386172583, 0x12ca0b32284e6c70,
440       0xb48995fadcf35630, 0x0646368454cd217d, 0xa21c168e40d765b5,
441       0x4260d3811337da30, 0xb72728a01cff78e4, 0x8586920947f4756f,
442       0xc21e5f853cae7dc1, 0xf08c9533be9de285, 0x72df06653b4256d6,
443       0xf7b7f937f8db1779, 0x976db27dd0418127, 0x9ce863b7bc3f9e00,
444       0xebb679854fcf3a0a, 0x2ccebabbcf1afa99, 0x44201d6be451dac5,
445       0xb4af71c0e9a537d1, 0xad8fe9bb33ed2681, 0xcb30128bb68df43b,
446       0x154d8328903e8d07, 0x5844276dabeabdff, 0xd99017d7d36d930b,
447       0xabb0b4774fb261ca, 0x0a43f075d62e67e0, 0x8df7b371355ada6b,
448       0xf4c7a40d06513dcf, 0x257a3615955a0372, 0x987ac410bba74c06,
449       0xa011a46f25a632a2, 0xa14384b963ddd995, 0xf51b6b8cf9d50ba7,
450       0x3acdb91ee3abf18d, 0x34e799be08920e8c, 0x8766748a31304b36,
451       0x0aa239d5d0092f2e, 0xadf473ed26628594, 0xc4094b798eb4b79b,
452       0xe04ee5f33cd130f4, 0x85045d098c341d46, 0xf936cdf115a890ec,
453       0x51d137b6d8d2eb4f, 0xd10738bb2fccc1ef,
454   };
455 #else
456   constexpr uint64_t kGolden[kNumGoldenOutputs] = {
457       0x4c34aacf38f6eee4, 0x88b1366815e50b88, 0x1a36bd0c6150fb9c,
458       0xa783aba8a67366c7, 0xbc89ebdc622314e4, 0x632bc3cfcc7544d8,
459       0xbe77aa94940527f9, 0x7ea5c12f2669fe31, 0xa33eed8737d946b9,
460       0x74d832ea11fd18ab, 0x49c0487486246cdc, 0x3fdd986c87ddb0a0,
461       0xac3fa52a64d7c09a, 0xbff0e330196e7ed2, 0x8c8138d3ad7d3cce,
462       0x968c7d4b48e93778, 0xa04c78d3a421f529, 0x8854bc9c3c3c0241,
463       0xcccfcdf5a41113fe, 0xe6fc63dc543d984d, 0x00a39ff89e903c05,
464       0xaf7e9da25f9a26f9, 0x6e269a13d01a43df, 0x846d2300ce2ecdf8,
465       0xe7ea8c8f08478260, 0x9a2db0d62f6232f3, 0x6f66c761d168c59f,
466       0x55f9feacaae82043, 0x518084043700f614, 0xb0c8cfc11bead99f,
467       0xe4a68fdab6359d80, 0x97b17caa8f92236e, 0x96edf5e8363643dc,
468       0x9b3fbcd8d5b254cd, 0x22a263621d9b3a8b, 0xde90bf6f81800a6d,
469       0x1b51cae38c2e9513, 0x689215b3c414ef21, 0x064dc85afae8f557,
470       0xa2f3a8b51f408378, 0x6907c197ec1f6a3b, 0xfe83a42ef5c1cf13,
471       0x9b8b1d8f7a20cc13, 0x1f1681d52ca895d0, 0xd7b1670bf28e0f96,
472       0xb32f20f82d8b038a, 0x6a61d030fb2f5253, 0x8eb2bb0bc29ebb39,
473       0x144f36f7a9eef95c, 0xe77aa47d29808d8c, 0xf14d34c1fc568bad,
474       0x9796dcd4383f3c73, 0xa2f685fc1be7225b, 0xf3791295b16068b1,
475       0xb6b8f63424618948, 0x8ac4fd587045db19, 0x7e2aec2c34feb72e,
476       0x72e135a6910ccbb1, 0x661ff16f3c904e6f, 0xdf92cf9d67ca092d,
477       0x98a9953d79722eef, 0xe0649ed2181d1707, 0xcd8b8478636a297b,
478       0x9516258709c8471b, 0xc703b675b51f4394, 0xdb740eae020139f3,
479       0x57d1499ac4212ff2, 0x355cc03713d43825, 0x0e71ac9b8b1e101e,
480       0x8029fa72258ff559, 0xa2159726b4c16a50, 0x04e61582fba43007,
481       0xdab25af835be8cce, 0x13510b1b184705ee, 0xabdbc9e53666fdeb,
482       0x94a788fcb8173cef, 0x750d5e031286e722, 0x02559e72f4f5b497,
483       0x7d6e0e5996a646fa, 0x66e871b73b014132, 0x2ec170083f8b784f,
484       0x34ac9540cfce3fd9, 0x75c5622c6aad1295, 0xf799a6bb2651acc1,
485       0x8f6bcd3145bdc452, 0xddd9d326eb584a04, 0x5411af1e3532f8dc,
486       0xeb34722f2ad0f509, 0x835bc952a82298cc, 0xeb3839ff60ea92ad,
487       0x70bddf1bcdc8a4bc, 0x4bfb3ee86fcde525, 0xc7b3b93b81dfa386,
488       0xe66db544d57997e8, 0xf68a1b83fd363187, 0xe9b99bec615b171b,
489       0x093fba04d04ad28a, 0xba6117ed4231a303, 0x594bef25f9d4e206,
490       0x0a8cba60578b8f67, 0x88f6c7ca10b06019, 0x32a74082aef17b08,
491       0xe758222f971e22df, 0x4af14ff4a593e51e, 0xdba651e16cb09044,
492       0x3f3ac837d181eaac, 0xa5589a3f89610c01, 0xd409a7c3a18d5643,
493       0x8a89444f82962f26, 0x22eb62a13b9771b9, 0xd3a617615256ddd8,
494       0x7089b990c4bba297, 0x7d752893783eac4f, 0x1f2fcbb79372c915,
495       0x67a4446b17eb9839, 0x70d11df5cae46788, 0x52621e1780b47d0f,
496       0xcf63b93a6e590ee6, 0xb6bc96b58ee064b8, 0x2587f8d635ca9c75,
497       0xc6bddd62ec5e5d01, 0x957398ad3009cdb7, 0x05b6890b20bcd0d3,
498       0xbe6e965ff837222e, 0x47383a87d2b04b1a, 0x7d42207e6d8d7950,
499       0x7e981ed12a7f4aa3, 0xdebb05b30769441a, 0xaac5d86f4ff76c49,
500       0x384f195ca3248331, 0xec4c4b855e909ca1, 0x6a7eeb5a657d73d5,
501       0x9efbebe2fa9c2791, 0x19e7fa0546900c4d,
502   };
503 #endif
504 
505 #if UPDATE_GOLDEN
506   (void)kGolden;  // Silence warning.
507   for (size_t i = 0; i < kNumGoldenOutputs; ++i) {
508     std::string str;
509     ASSERT_TRUE(absl::Base64Unescape(cases[i].base64_data, &str));
510     uint64_t h = absl::hash_internal::LowLevelHash(str.data(), str.size(),
511                                                    cases[i].seed, kSalt);
512     printf("0x%016" PRIx64 ", ", h);
513     if (i % 3 == 2) {
514       printf("\n");
515     }
516   }
517   printf("\n\n\n");
518   EXPECT_FALSE(true);
519 #else
520   for (size_t i = 0; i < kNumGoldenOutputs; ++i) {
521     SCOPED_TRACE(::testing::Message()
522                  << "i = " << i << "; input = " << cases[i].base64_data);
523     std::string str;
524     ASSERT_TRUE(absl::Base64Unescape(cases[i].base64_data, &str));
525     EXPECT_EQ(absl::hash_internal::LowLevelHash(str.data(), str.size(),
526                                                 cases[i].seed, kSalt),
527               kGolden[i]);
528   }
529 #endif
530 }
531 
532 }  // namespace
533