import o from "ospec" import {Crc32} from "./crc32.js" import ByteBuffer from "bytebuffer" import {makeByteBuffer} from "../utils/utils.js" // test vectors generated with MsgKit const TEST_VECTORS: Record = { "6bd6d63e9bfaad34dd7834855964ef6d8b88cf678a028aa2ba0fa041b740221d41de7cd6c0ce83f6388cecabad2d3927": 1123334631, d76608bc4cd0694c33838c596b7d9d5517447be818adbc04d92ffd15def58dd579b9dfda1960f40e128a8c4af79ccc0f4f5695e8be3f6f2aa903: 1944757927, "1dd2536d3df5b6e0b19dc23bb6506cd58e20720d3c62edc68860a416394ab531167dd73bbf1c4e5441bc1a72": 3652142290, "1ade98526ae10937f6a6bae48de5dd519fa767e791253979301571d11dcc80477b396e810cc4cf69acf91fd61c5732377003a115b38bfbf4a4": 840955160, "21547037192a26726953775c44dbd8fd3b9706635cd9e33961192a6a94ef3e79dceda27af974e0f5afa9": 2197976691, debf14bfc63db55063ee40c2477136d6ffffbcde7915fd7f57385d04c6b711b4b3ec04794c5a642ddf9fdb8b9b2a: 202001547, "09c39ee0f5f3ca73c9c294678ddfb189acdc8c0e5b6cbc89a49a8effda3a72e32cdd544128d61bc1e8783bb7b8f2d64e2d162eae0f1cff9c06143b5a64cb99": 1462544538, "4fb03bb08b6f61d5c1ca25e33104d0b2c340d1c40bc3d410deb73b139ac05c1ddfab6708b726c3beb459ed45f61c6b0143": 1861315611, "9724fad5848cdc2bd2d3344d3a016d0804859dc8fb9d7d130fb1d68f19c24b39d0102938230927db2c8b54ef89671eebd7ee17e664": 239365028, "8ef9a7e7c6d2b54c111087fb7c29d735e5fa5ec19c6f488d89a793eab82baa65d555822f903c435426df7a44678eeaf414a1091d87a3dd": 2696684269, b0195d1e3fca94e666212527a7a8a5a8b60a9abdf50425fbbc9ed617228cde3277637e77de2514: 484153903, "4a93dd4568c34c6cfc60667d082029acf36161a0f47dc4d943f3af44292ec991f53e736127df93f8516a1ac22560295739d2837dc37367cccf": 2057370487, "0174140842ce96d587c9adc88513ce694f896202b3e3ca570b57aa4cce81d7a69122de1e": 1626561873, "49284c2b50d860aa704d6faf5a24dd6acd501eaabcfdea23490606f106366235af85": 2972582388, "6115d6630a69ad9a0a3b9d745df93cc4d2bf74274c3d29e249d26ea33aea39ffd51e7b54f7ed13400f62e0e7ac92a8f8ca728f763a5d": 125344596, "24ebf41938fb0a601f029d9f3e7de8cce5ab3318e95c4235b72976d8c85bc2c57765576803d3db450402c1": 1950754462, "0ff36a7ae2a5a9ca0645cfc7a9be610e853198c33fd827d9267fc911d0ee13e79b5e26c3bffbf622b1f8be319590be": 4211371506, "72ccc0d36afda436cb915462db98f91831e82b4b979d4f893b75124719f54395c0859f042e407d9eb9eff82ea7934719fea5ffad64": 4278701414, acd47d3697f5ea5c1dd54ebea156f8f5e9f16b8d91a8a521e1a72df94973f595314dd8cb87f7a888b35cd222dfe9f1f02008bb0e42d7e2: 1597038474, "2e5b55f0c7f113a9dfb88d547e2d6ef249e3d934d58341f8b53cd840b8e752596ad39c2ba2b8c0c1492942275c9d72f39ac9c55f": 756674558, ad2fab1a5d3a8a19d3f1f86533e9aa90424f912218ebac40199b18cae5a5ee22f35cbda4f011457d36a876384ac129b3c8: 4012932174, "5779333de5c2836b00c121c0332d02d572d72c059f310a13eb6f7573f658726401834d74eeb676fa21851084": 376972030, "76754835744f5287c2c2266f2051754d0f74a84ebcbeb0e08ee6bc6031e4192186b775fa2c": 1521819254, "810820dd3fc02704cd6400ad111068359fb8c468a78d93f156dda804e969dc7b20d1f3a02edf7eefb88919585f83d208b95017bc35c496f374": 3349808023, "876118221b6487858d401dc807bf39d4af1e743b92d20b9f4b985220455b3b002bff581cd7956db5d0d9f592ebf049": 469142713, "836014777e399bb45678d68211673f32041d9c07671cfd1ab0bf6ab8dd78b35a4ffa9ce546c381f164a3c65fbeeaa3699ac38dce53": 3532514533, ef6663fac7bfcee2d7ddc47b3317ca5aec419caba3c3569d5bc61c001e1aebe5070c0a36814bfcc222: 6742071, cce89a42b68b9f3fd74c32a89f2c0fc59f00a2cdc4bdf2de74270c93d9a044da8822f76e0218: 81287520, "9061de439fb35e6dde26bbabfb1f55bd0ff6bccd8f7e0b66360758207c34a1c387f1116ce579522b16b92e6c": 3549933163, f449ba3365e778464a7f1255780c975b3ef0a985f8240a0de8d795a390b7d6509e4841be9dec174d287c3c71ff166c6dbbcfd8c884e725: 2346363972, "3fac4a8d51d5b592a9c2b72fcad9bd51d85b5d7ce7980ed26a28e7c1de0dcbb723717ff0": 644439712, "8afc53c6a9c83c5f3da2e21187ef2989a9e8a69e782229edf4b49cf7ff0b5959cdae4e5f09b53dd0": 3487362040, "732d8505af571da12d7a89d8522a68d266d1f52c455f31498844d8a1c980f3aad6cc05f5a3e7445c7e55d191d0807a84e68ca3e347a38c13": 613216947, "3c7d6a7e7cd8ad86de018625722f7e8d99adf08da07907ca53bb3cdc0f623240f1fa666ad9dd027c240b": 289041309, "7ff35f735d2556aef69c855bc375a02bc19cd0767bcf463378c813b3bbab7369958788d6f347deb7b9b43ca46b9ea3f439b240e0549476afad": 3176620970, fb9411a3f24a281cc63cedc93779bd18bdc692a2c7d9251f79096a93150010d829c74c49a615c1f1: 1629899693, "4fd867076f7ac7223bd6af1d0a64216ff229e9df9506c52b149f6f2d7372a704a0267800bd17098ea370d92961bb1f63": 1981662236, d9b4ebd811e649133cf2d00b99aec92faa7ce3ec21b2da205a3c242c9bc959800c0399bdbc2c8e40: 1935808139, ec8124398309c210fab63f3b760827dacb7ed5c21c7772994ffe96140b737eeda3bd3430b5e6d732611ca113194596fa72e3f0aeb97e12740f8aea8573ad04: 3553441671, "385198b9d4f724e4a6a26000d65f800a689ca22882d03424aabf212afc51bfb31719dbc8addd267abf0b07161d129d": 1923492819, "0adf1dd60bdc04671d730e14d5f9e855e2ace8bd84b75c8a76276977c81d07982171201c34e8a83b1473aa3ace11a5c523b2347129e02b52839260e372": 2941927482, "9f006c75f263d9cb20f903ada8100d22bc6482a35416e9956e4145cd99a288c5c887d4aace591e41ec57913a6d7c": 2649563112, "1a4560d6fc61ce398817d606b11d0b327e713ee4213c6254624640b7fc85ae28f1092a8838cb8c63f94e4b93f7526c23e02412c82e9816": 625240691, e20c73b520163c0268ae14a8f383f9b3e5daead3f1cf5c10d91dd7d772e5f959f3: 3938046397, a52b58d643e311492a493dc4305c2a5fe354ae43ed12b062dc033f649082b4bbb4a6dece5a0f9707c1a7a412d314ec7bad1302a5abb05f927bf5f940: 3954678998, adb9a79581108a7d5c04d4bca681456e9d8fc716c3b77d800f0f04464b526515576314eefc7d510462fd500e2ee8042e1a24dd66322ae0f63c27: 4078961277, "710b44310a9fbe65436d5671203dc3b3c5676e52260bd52b2774ffe22c831db2d5f7dff91ecb456e6f83c1c1c4b3bd286f761a": 2656420350, cdd55e6635180a959fdb38c04fa39c285dca94fa21ffe2a34a146674b6d773b5: 145849661, "8ee5ff9979c306c1b0cf934a0171211695caa5e1206dcdf3bb1c20b196dec8688257c0bd9c8fe4068e3870304e5948a3455d210cced34821180cdd5da2542b": 3066354466, "062bc7aab0637a06e69e53e7fd9ca461d37d6c38bdbc99af0e9fa590b187643a0d9f2a22929ef2e1e31b26308060247b67": 3216821156, "8924e7f2144a92189b11beea545f3a18da5d7282cf348b8b55a295692ead7b292835fd3f531a8be0907903e022f8c6c6f66886c609e5ac55995b9d72b429ea": 907717975, "9595c21f61fac5c0d291f15531aa695cdbcf72c627b51f4289a7a5f77c182c668f15": 465291004, "8d36a765fba2c5f377f35624eff24096e5b623c6e0757f95ba55ce43b9658bc51b5fdb253369772361c1a74e3283b6043b8246b06b4e6a17b711aaa6d48239": 2522548140, "6890088f171a627b3e00651ece3063369ec907371eda5acdf5c46e22bed14ede8895e5a17a": 1948789057, ed201fcb716be84b4986ae74070a7a02f38e363b9a52ac40bc6db28696384ac1bc77dce7: 3274865305, "5369eee4a97be8744ac9436485a2576b3f8c9a74de0f04b861b4103becb8902d93e99f254756f0": 1603834845, c3cc71a36e221096f3567cea42723944643683f56aac87923915d19c023223e99c: 1047634039, b1129d614a3fa37a48963ba6eb20b05bc011d2fb6c1645df6a58517493c032934e7ec126a603eb4451f064f057922ab0eba7721216: 400683700, "579acdbef6f1ee2ee68764a7576d5f89b4bd258ea97bb25487d72ea089ec4e207dad272759e80cfa562209dc8caf3abc5062f2b4ec": 3633475111, f6dbe878361fc34da5fa39432aaa46382fccb02b388772d5c8d89c715027fa9933f6b64b3fe0b1ed: 1938079882, "087c0fa34884907617322504c14e6f6912b05d8252fc7eff9f1034f3faf94e1bc2f52f0a62327f540cfa38": 1750486135, d49572a747e22c30536be30bfe100338509d7c1ee30a41cb1e6407e030097658c4892a0a9d8cab18cd1ec75711230c522e47036e7e1911ca54: 1906524473, "89e2db4cff4af58b4774e5f99bc4f16351c443e9bafa58b4b1e90607d9aa7860b5f603c83d811e7d6285dc986d35ab3f7c1ac84c876aec": 1902064246, "8a269a1544edb29cfb8443a4c02926d0a5c587351ebf477c3dc68abfe22bd94b0a753d16e6093974": 2647485924, "409ce8f1077e53f3f8a6c1e3b670cadf1dd77d63f2bacfabf8994beb10e99c8c1261dd235e8a3648": 112568137, cbea85176753057237c931bb11e086cc3df96d3368e30e0a34d05592a78093a1352c27cf4a9390464678d8206ad0008157562090c814cee7db7be297: 2487975447, "72cbb6359086e5b8b682aa6927ecef0bee9f64cfd33a506002d8205d3ff4cfb0f947d3ac21eada491bc8a1d47627a028de": 133714852, eddb7ec72b387a5633b7668779c2b2f970df1943e903c51ab40a987ce9db37f87f6306f331311c9b32cbb622: 3009760418, "934fdf217cb6c10e9bf3ea166413209ffe6c58806e0815bbbfc73ec37d101d4ca23620bbb95a6d2476e9e3701cdc": 791741936, "1efcfb345e5ea2758a392362b477fd908bd59d742df264e6a3ff33098525a59ee2fa20c682dcbfee00c1958195f7b8": 3453860354, "7858589b7f689f2c9715905e2b99f065948480ba57360eaf15af746c5ce350ab4786902c": 1468730088, "0a1f795af42f6c4b60c366d130ec1077fd554149a985cff433cfb4c5e517a408c3988a65065f6307a263b5ec0d9a2cf6403449304ee323844f852625": 2987411843, a765491e5e0e9762ab709df23aa745cfe3e699a2bd84b0cd74bae075051581393d8cfafe6ccdaf8c95: 3531119147, "94c4ab3d143bdeb56c9e8d82bd22b57baaa42e225c95ef64b4adac476316370d0d29f0ec2136a5a49750": 645563184, e2abbbced848f0230a5e7337fed44788668f9651556680759432c95a74fe8a8b0cec0cb8f9dfd4fe73f2: 3504170306, ae9af1f117daad3f1400ff537b2b4639a57f96af0cd4e72b12c78f8f86bb98dd6239d1: 4242403130, a340b17fc6bf758a0d99918cb3a52e7fdd4320dab2c6df4f4b1eb8596821f0415a6b9664cd: 1494508011, e84c5e5d1d793602dce08c19001f18f629dc616234a8071c22eba84f32480fc9b1c65bd47c54a8: 2556761297, "184841d7cc4f20d1296341b9036be14045423a32d0e7cf94d1c36739c3447ad434fb49": 4233867762, "662f4fd3cbd626ce0656c645e51b8e391a76953178ad0609e7e70de4e96d8407": 706711022, f5d916f36766f9c0018d7afd2254a8b640b9bd661773b82945ece4c941e498d1be22f0417846b30f9b71771f8b0cc4: 1429572861, "652ea9b4c6a10b8220ecad7a82307e1cf5a83eff63663df906aecaa6fb999d3927": 459355549, "63133ae40a1d176d218b99388c6bf25a2ae2cec52ffef0b0ad18d76486874e735331cc6be1119d20e7f545b15fce215eb3a06eba6b612165228a36f246b2": 1373196540, "993c26e45a9e86781944addd39b83e50dff678b0e6189308f110664957daabd9": 3429862123, "0eab7539e9c7bf2d275576bd83e8ade33957fbce010081a81df34a383d213e99d3a92a0cc917f52fb883bec31d4a6d27b9651d83af": 2345874504, "320e2acc1bf67c87f00517dce9dabda0192261cc157e42be8ad385227ed704bae9c7761ce2fdfbffb23193b8ac40609269194bfa22e3f6b4cb": 1107469338, "4148705a0819015cf32164a1bd1c276119e4eb89124a72f2b8658b099806d1c25076bbb28e58287ab64f4d": 3593064858, "2ec85b2fd2c0ca11c8425af7d67ea1a38df7c3ed50a151476174d2c0bc71d2c2fc33c3f00a5c36d73bc0f90e1bc4dc10b785ecbf8c60ee8c7613ce5ded": 551378781, "55576f98faa2bbb19831c0ebb190a8432c9c98c209378413369c443679f78ed9ea326aa19e83c9395406ecbbfea0ae5e": 1063916306, "33e731c52a001ed25b615e5e8437a1a3e7017f2506a4a8d35f6d034ac91595ede652450f5c13bf324ccf42216adbd0ce4a17": 3769933849, "9e2f38de8f3e5d65bdfcd30946cc707832f29146d4424cd937618668849d35ffb2fef6bead73b6d1fead023578c6fb": 1333161355, fa639edcb9d1425ce25fa62db8f5e11fc7d35647d5b2cabe3cc047264017617165316e21ff5846e1bc9adb4dcd88: 2041694487, "09cce26da46fb4804898dfa0f8891c1bcbfe35c78687c0206e8d758b3ad67df1": 2301722839, a73e5a5ea9bc02b1b125881fb84d57a07f104f97c092820bc2ff16f92845711aeeec514bc1bd21413316d5613700b53f1eebbac5: 3757845119, "59f315bb4e9baaa509896bb36e31ccfc0cdec1ee0e64aabc21d3c149d7db3c8aaced94f93c8f7321779b2a8c6aadc9cee943110df9d6": 185184649, f448599a7bda60ce2e4ce007809cd3bf7d6ba077723a1d517309f35f93c92f91d6cd9fb0e3f4f74716ccfb408aa548311683: 2793236018, a2585facba2a072771e7003b641c4e31b3fc22dc89735860a63eddc7cdc0c1490f368d397620e586dbcd8560159197233b74: 1467531561, "34f3a60a2efffe067b4c4059b025b72b2e8f15ba92179b01bcedf84a14a7ba8c592b8c55692c5e3978196a399b73d4": 2773683197, "5e65699325ba021d57a54d4007b3f2d492b300859961c20230dc4278ad62654818bdecae3d26669f286efdc3de1d31c42795a6e773": 4250245515, a0fda3666249788a70f53f05274ac743966b4d615d2b63fe2413aa7d5117bb7ed5c91cee0bd6c31d269efe: 1605353275, } o.spec("crc32", function () { o("empty array is 0", function () { const buf = makeByteBuffer() o(Crc32.calculate(buf)).equals(0) }) o("buffer with offset > limit is 0", function () { const buf = new ByteBuffer(10, ByteBuffer.LITTLE_ENDIAN) buf.limit = 5 buf.offset = 6 o(Crc32.calculate(buf)).equals(0) }) o("buffer with offset == limit is 0", function () { const buf = new ByteBuffer(10, ByteBuffer.LITTLE_ENDIAN) buf.limit = 5 buf.offset = 5 o(Crc32.calculate(buf)).equals(0) }) o("simple buffer", function () { const buf = ByteBuffer.fromHex("010203040506", ByteBuffer.LITTLE_ENDIAN) o(Crc32.calculate(buf)).equals(808769159) o(buf.offset).equals(0) }) Object.keys(TEST_VECTORS).forEach(k => { o(k, function () { const buf = ByteBuffer.fromHex(k, ByteBuffer.LITTLE_ENDIAN) o(Crc32.calculate(buf)).equals(TEST_VECTORS[k]) }) }) })