From 0b9c5695b88be01ef6af37782feb6a6b32c20485 Mon Sep 17 00:00:00 2001 From: Joltras <72395471+Joltras@users.noreply.github.com> Date: Tue, 3 Nov 2026 13:48:48 +0000 Subject: [PATCH 1/2] test: pin generated floors for fixed seeds --- test/resources/floor_hashes.json | 332 +++++++++++++++++++++++++++++++ test/seed_stability_test.py | 72 +++++++ 2 files changed, 404 insertions(+) create mode 100644 test/resources/floor_hashes.json create mode 100644 test/seed_stability_test.py diff --git a/test/resources/floor_hashes.json b/test/resources/floor_hashes.json new file mode 100644 index 0000000..ccb951e --- /dev/null +++ b/test/resources/floor_hashes.json @@ -0,0 +1,332 @@ +{ + "0/0": "667a9cfead0ee84b24638debe853e9f07b54b62c789e06042cae84615cf18acb", + "0/1": "511ba73ee63d111c6791ddd538e8483149b0723a3272f921728243d0cd157a45", + "0/2": "26b1ad266ec647d0f9201b7ccfca7717670e75413855b2d31c400126a7217e68", + "0/3": "50fa6fdc4bf885bbea09935c0ce03fa3a96b6c0c308fcbf35abd255557f282bc", + "0/4": "c7d909fe0035c561c3d726a3b20e46f069931c0b6697d64e0e396d11b4c6070e", + "0/5": "346a0df5597ec95c737993cd70865bf7656d5ca7856ed636eb0656b194e13d9a", + "0/6": "93aea70619ca3b9cb1e8a6eb94686e74763f99b318fa6804c368532af88e6ab0", + "0/7": "219057f3cf676b0fe38fb0ff042ffc53d69dd0aa488b76c816364eb43ae578a6", + "0/8": "f47759906af1b61abc028fca7bc7d5a964b991aa69834e8f7f720f1699f59029", + "0/9": "5be1da3c324e4a0495ff3e039c1a5d7007575cdec7ee6038d6f90dd36ecb72a3", + "0/10": "6e7a7c514bc65e5e172003b050d5cfa2a857d7bced3d7238ec7b99c6ab18cb45", + "0/11": "351cc68dbeb351c7999b87a9dff288549b91a2d54e0c4429f2f579c5335bb7b6", + "0/12": "427723824565adeafb942a0c9ba52abccd9873740b4e30825e93d983aee72cb2", + "0/13": "215369ecf981ba5e064c6eefcda6ac79076efaa2c9d8d28302c8ab151651190a", + "0/14": "75368c18f997422ddd4bfb95229bda9704ee2f1b71e9bb28f4b45da71051eabd", + "0/15": "0cdcf54e7d11df66b83ddeca4735887ff32561786c99e822bfc277973a0cdc15", + "0/16": "e5fc5668106c98931c1fdacef1c9b78f052a50cfb94c7c6fc7bc340d77703a04", + "0/17": "d31b7f1559567099e48a4671e179df4131bc78c89ccd300c2995114b4d8a8c99", + "0/18": "235dd2d3f5cb746804a32924925b44b9d987fc4157e980a887456cd9e3388b0a", + "0/19": "4ae80f039241f42f0b3fbdc63fbb1554ddd8c6d243eba2546b3d989bbff32750", + "0/20": "eccac4c2ea2d1c95ddb0ded51d50e8526254022f108da1ba897da000f908f796", + "0/21": "70993482c9a0bd264d8bca0ed840af610ebd80881c1a1d50c88ee65fb894bd31", + "0/22": "3eec1a1e4dc492765a032910a0f07ce0fd3d2dc9192ad74cbe0f5793ca381bd4", + "0/23": "ff4d70cde842004735deff91a2650da6189971bc4cba9ca58629d97dfc69a5fb", + "0/24": "6205bd8a27e381315c39f13e817f5634ba4e8217d82c1b5aaf1f6869e8a0f385", + "0/25": "2a88e34db0b070e4adeb32453cda0ca25cf99728105e9b878f79c3f47a92479a", + "0/26": "d627348b95b94e5ac8cdcaa2ae22618ef5622e2602863e842500bc11ef72b6c1", + "0/27": "572ead0d8ba0863a75972f405c6e6651a1e8e27a9c76b4956afaa5debaefb6e2", + "0/28": "c6608af427541a761bf8709dca029769562fc607b098cc23acf26f306081546d", + "0/29": "13acb5687d39012211189d5f2e6d45b9c4769fb6559336756b9fc7c8e5ccc77d", + "0/30": "66f83cbfabecbf60f9f01da2813aae2e98bf6f02178873f0ebc9395bb3ad15ed", + "0/31": "52ecc85fa13212a8a65ccd5598c02d32d3b97ba2ceac52e972d31cd083497150", + "0/32": "b66365a61dd2e47259642b331fa79613c81a4e6b53e8cc499b7a18a8ad0631e5", + "0/33": "57ca45a409f1734e45bcbc78fbe881552e3687d87a0dd0bf5bb2b31d449b31de", + "0/34": "31d530d4ca914b9c1d79d7b082dfbcfb7807b70e3275310514c144090fe13520", + "0/35": "79576b80e0adc3c2b71cc86c2b447dc30ea62f05ddf64b45ca2ef5d7d56f02c2", + "0/36": "0438356877c517b5c4c92e370fb2be6a156b2e6c8d5ecdbcb382ff3861c8e34f", + "0/37": "fff9e190d602030911360f579250d55e982188e60f7649eebbb3a53a3565ce2b", + "0/38": "107e1e2dd304f3949b9a353a8f7ad2555e9b8648d62f365e27123276cff82f81", + "0/39": "432b0f2112f18bf254c7bdce2a5288e3d6d9991c374df23cf9f84ae14d01c22f", + "0/40": "2f0ee0637f340d16243edf8866964d8633f8fc270d18244815053f49a8b64e62", + "0/41": "97d64952c0c4e50b6185c0f2657b2d7fe98bd609d1c6b0e305ea9601ea8686da", + "0/42": "131b39d37c07baa8e21119c9fc2eb9dba8a30d9874bc19819d65d6addb5948a3", + "0/43": "6342fe5cbcf02e51359a7de02065be4e48ad221e7de8ed43ef97ca13cf7baac9", + "0/44": "75481f7107123d1fc9919b274bfcdbbfb607571dd3075c9e2014719d60adce34", + "0/45": "3c0b0db22342bceaed5918058d6429b1d7153b05e01fe3d6dff7afafb11167da", + "0/46": "b8bb1db7f335814befc7c75312020a2dd16180de4c10ea51dcbc831c22215c48", + "0/47": "7a1149373c8af948bd97fa8417e0c80d91b09708e242094ac9637374a06c8a42", + "0/48": "b53af9d64d168e4052b178b11c9682b79a21e363598b3c3d46fec259ed90bc0d", + "0/49": "d383610c527d2387243890543439d57afaab9599349443f1e173f1a494b71135", + "0/abc": "ee670af2d2421047ace08b96402dbecedb9e23789bb451ce525a91df69e22e55", + "0/test-seed": "db05390daa78e555bc4ae76274e06209f979c994cb56665ec7a9b01cb2a9b106", + "0/a\"b": "e7afc132e9e14381dd6a2fdf425ab6319b04f3a18c2ff603808c6fc5b5766f0f", + "0/รค๐Ÿ™‚": "8f5975ac7b35255a3a23e16481f530cce51077176d5eca456e40516d430e8e86", + "0/78d11f0d5a8bd74e510194e16e4b352a": "94807a03104fb5f26cdc228fcaa296c4c223cc0796aa7cacc486e446fc63aa89", + "1/0": "06f3e380a0454a289f275cd31109f1347bd80edaf0a4b3ad2a03b1e3827353a9", + "1/1": "6fb84b346119e22c0dbd6cb46ceb9894c64281953054893b258d34b92cdcba7e", + "1/2": "4b0b7ae037a6784ecd68b445389fb2c0a1c19f985a5489ab41bbfa0cee0133e8", + "1/3": "228085855591c043f2bb78f25f637d075fd984d7b543efe96569daeceece0b8f", + "1/4": "7bd40c34f3682a2e1baa586c9e8d2638604c1ad4e6b1b97325de0d9a775662e3", + "1/5": "ddf69a34a66c6a5ba1953664e1ed512c48f13b568d96e9799b10aff4137d6fe5", + "1/6": "a8181c177083a515f9b0432abb12375f5f4cdcf1964376df80b83b1738b3aa07", + "1/7": "7541e95e1299dd308101611b9dabc4c834d5b27545be6c045f34d12ec61273d1", + "1/8": "d58f50c11bc025df8410ac14a057acc25d3dc1cbfdc4e0c05ce7f2bc71259943", + "1/9": "c052335d435909de9292aec4de4ef9adb62ea85f1d7f6d66c77f0564a78d9849", + "1/10": "57bb3a07e49eb2b8e0924f36988e11fe35c2675316fbed77686cfae72130dac0", + "1/11": "0787c6e809b9c9199385fabb52f5d5953a611e1197144238e83182e26935beee", + "1/12": "ae0a86af56aee767d7e7902afb45d65f6c581b504e1a8365e99c32ec099adcb2", + "1/13": "8a5e15f82e42cb7aa87cf202164286f8587612b915dcd48001fd886a32fa5380", + "1/14": "5796e0eeb162e87f43a81608897a52a0a81220a0e1f960fe8ddfd7bd9eb95c73", + "1/15": "8bd71c93f480412cbf30e57f43cca13e87867ed32c3b93fc538a2bcfb52e66ef", + "1/16": "88785347e376907f13000ac731f6c49823331b45f24a240d12253f4be6d8a31e", + "1/17": "be7edf3d551dc7f28f0dc51178b9abf9aca7899d0ce9ccb7efecfb33fa9166d0", + "1/18": "71235056461544caf46b0037a88862d46dc92cc8010503c8967122a82985fe53", + "1/19": "ba51d15b223eb72131aa8aa75d1a37ceba5772ad54a8299608124aa3af558d01", + "1/20": "1eb9dd048b9251dc0ffabc728ffe9663b6b13babab9663a65ad8193f91fabf77", + "1/21": "b3ef5a0a59a8cebe9621e9dea8de86a70074fcf83f59618d2b315e4991c62687", + "1/22": "53443edab67d8199ec33cd3b6679c3b2894938bb931a8e7ea0ebbe19c8539971", + "1/23": "38dfb23083f4c7e6330af85b302be7633315c9511ea902995d7ab50b053a6ca8", + "1/24": "5393af8d46382f07b1367a5829e1ded98ed939e28e90f1e8181e04419b2865dc", + "1/25": "6eeeecb789724f00b49cbd55266893b8a13da106529c46e92ce04e4d32512020", + "1/26": "3f7738ccfbb3311f7c31306b1347291822940732575fd7206ec4b09919df7216", + "1/27": "13f10331f066eacdd9c3fccee42e159fa9c9eb6b965cd6026b33da0e16c922ab", + "1/28": "6de234ec7b3f30c4e489aa2e94606f9c6fa530e214eb4d699723792cc76d8fec", + "1/29": "3a5168aa79081a6450e2bb38097ac496049fb0a271a37038b3688554578ececc", + "1/30": "fdabc3e16fec6aef1ed20cd90eade7166e5ecedcda2e89efe7a72723fc4d1eac", + "1/31": "03885387785304dae42ee63fd162e5adb070f60e33fc5d172cc50279b3b8e4c5", + "1/32": "19c37d90014bdf1847410b055055f4344a4606a91796e12b0489df7dc4e006c4", + "1/33": "97aa4a72db16c4308142be6bc25790f55382c9d9368413d4cc28a9588249db8c", + "1/34": "b405a55596d53a79f764c043e2452b4bc130de9be5a9dc0d35510b134c846bc1", + "1/35": "6ce0ec058ecfc4fda305bc189f1739f6bd1e0b43ebf0fb24ab57a57906d8a369", + "1/36": "807672fe824d3c9692aa144b57b84b5fb6d8ecda9a0ca3fde9a0a8afaa5898c1", + "1/37": "bf609e8e5c5948cb5f9779b9b923e4884be110b3dbae7970e6f945eec0d80dd9", + "1/38": "19daa83dd009d70ba908a0d8ceeba7ec5b9437401d8d05d7974dbb02dfd25563", + "1/39": "9c9edabd4ee6f9c2df77008fe66b5047bac37a7312b54b8607bd670f23f6421a", + "1/40": "49278214df0a4bcb9ca313e33ed23d2202db6e54a615c17ed0cd25a8f9e1dc2a", + "1/41": "6fbc1d022a7c4a03382e33753e0bd93868984db0d7dd3e7051f9d86324a9d7b7", + "1/42": "c3d893f14e51d193dbab6e3b7a78fe75c6ce37b6c6af612f6a5f23813f577779", + "1/43": "6d44b78710c69266ffb91a2ce4c4c2d9be555925a40cf789f3a6235989e8f884", + "1/44": "2d7612be0e7601941d4c36f040ffe68fe7637cbe48edec978b57511940da9783", + "1/45": "c4b29859c14e5f954e2e692178f2c3d8b498c73e7c39b1294208940945d59baa", + "1/46": "00326a02b6a53605329f51251b89a2e3800d48a8a654b86b6d006cee5b87f0fe", + "1/47": "0e4bf78346c6736da7cdc9d6dda0cdf42684cf20c3bb401c1696152a16020f52", + "1/48": "2c30ca983b1912e2fffb451d61e6f6d47c3feba0d3a561a744541c35f8d205c3", + "1/49": "929664d66408e30183b5e41079d3bd4f82e5b72516de76ce03398e5de604b71c", + "1/abc": "9257965d629f078430d2c9172a92f3d1d29f0d8ee0574ffdc035d2d94c794e6f", + "1/test-seed": "196b5b8aa5072639f18d4f5ed1f74dea8073cb21fb19cb683b06189843114ea1", + "1/a\"b": "fa636dc8e8c1c7fe34bf3f05ce4aa23f7bdf11c7b4d47182d1e4cd4162e04a6b", + "1/รค๐Ÿ™‚": "5f0c62865f4d629ee2a90431f58cf996e6f7404cdd532f5f7995287cc6b7a932", + "1/78d11f0d5a8bd74e510194e16e4b352a": "44d8183f377c50c44bd12cb26eb0a5d1389365228b8fcbd61844eeae18c1159c", + "2/0": "ee7cfe83468e2d031070701392f91da5ef7e1eae0e75d0b8dc533bd7d4f431e0", + "2/1": "422975278a851b79e5538b828a5baf300ebdb21baaffcc7ab1ed40dc2764afab", + "2/2": "b358c501ba70144292a930925281a8cbe17f855974da8182e481abc3d371fefc", + "2/3": "5f2d593ded6ab5baa4dcd16ecbd5556bd8371e169bbde2640fd309fc56e8da4a", + "2/4": "0e67d547ca74bc44eed2e6b7aad902d9e8f468aaabd6260ccd0a74713c534053", + "2/5": "128e7d75a074509151d40cdbc0f5c1a4f1d36392281ea6d25d7506126bbb37e2", + "2/6": "163e67d7682107181eab1b882b65b53b8769a2ff6241efbdad0a060afbc7fe3c", + "2/7": "2159bbe387b1b78ad2ca287069f88e61f4a094f76e2958dbad4a0a290ea89466", + "2/8": "bdfbbead1175a3e51ab7df4b1a60ccb1f3c55d907d2c223e546e4f86cbe8caec", + "2/9": "e6892bad016d8ec35cc7bae671fbe1cab68ee9cc7f526b9e24b0335974d1aa97", + "2/10": "76034471aa772574a9e20c6e7178fd1cf231e18c8f041ba03b0207764495b8be", + "2/11": "5c30ef79704ac848644c1294b6419cf7f0caacba7d61b492f773e83d9e3d622c", + "2/12": "0e8f7dd59129cff4746be006fc860a99a622236c77bce2257ca164e26f60743e", + "2/13": "1c2e78023e7d77d4df638dc2908969b60723d124adec01752f1a718770e38672", + "2/14": "ce6e5378395e9696de3d357330092cbda1be8e4c26c47f20027b1f2890dee8c6", + "2/15": "2ee4f0ecc82fa904e12c6b8fb3897adaacd2d1306f4ee7d530326f8e725199d1", + "2/16": "b619531ad5e87d29e85a2108cb1ed0229f3841d69681c0cf7168ac8f347a8e8f", + "2/17": "f1301032ef103a22796de5778b452bbbdd4d16b22fa154043745bad1dabb91c5", + "2/18": "7f6f2418e59e2b55e6de52cb31fccf09f5a4ad1dd16c33ab357fabcd9e9eccee", + "2/19": "eaa5d483fc16612760543eefbdf2f8de3b3cb4be1826105dda8d8c88acd40554", + "2/20": "1d35036c3630e2be4f7a62f2748d026d7f60606665a3ae68891c6ae4c83d37ed", + "2/21": "66e33b8fc086cab1adf45b2e4310087a2b723ab78ab9821fc93fd791e57704a7", + "2/22": "eb731e14756ea4094d575bdac92c04c05ed0d6a1e524232f31a9a6a79653b127", + "2/23": "33cca471df2fa2b3d848884acc5618c0d77bf03a65f865154f8759cbdf100afd", + "2/24": "6bbda8561c73cefbc12a680d88f2d2598afcde24ae471fbbcf2a01c6945d4697", + "2/25": "31c2f0908e5b9f9b1618f3efb4ab8e8b1f46210536d17f96a4b3fe2a4914e829", + "2/26": "bf8dff10db43d17d80aee1e4bccf428655323b667207dc350fbcb90f4d3d8ea8", + "2/27": "787a7abdedc6ec5fe88927717874cadd1ea015e9619b37e57cf1087aba24b50d", + "2/28": "244e3c251368be0ae4df65a6b943842506943fd7f5f915e01deb54eba92d1589", + "2/29": "04d3c1219280e4b2bef4b34ed69350124611dbe8cb0d075d8d6d04defe78f27b", + "2/30": "ea44297a66e5d8f87b64feac30d5758bccdf2b80251301cc58f95552caed4dc5", + "2/31": "5126e00475c432ae8e3d902c8d1961ad927aa2c33507da88275ce2cac9c09797", + "2/32": "616d2ac9e1daa1ad61f3d51bd370afe74999ffd3a34c208a332dfecdbf61fdfa", + "2/33": "c7a3ae2892afccbbea6ef3a21554eee06845e324c25e810cfb76e9450b715f29", + "2/34": "82d8ee02a7dd95bb9791155d959c4ca7529b1f1cac84013a2b2693693f7b8304", + "2/35": "79a4a1816142a75e5f9a95b678e81a57805671c72ff2b066282643c4930ffe7b", + "2/36": "5bff1a0f02be9ed70c08c8bd73502f40290ebcbb934f521b544ad06b164177c6", + "2/37": "328fb12c1ee9ba3f96c02b9972732f8732ebf878d0157fd2af078cedc8bec5a2", + "2/38": "25b95a6fb4deaae4cde2f7abb460077ab380fa130e027d71db0ae76445f12822", + "2/39": "fc9b0bc29f64a4a5167693684925b41f72b6f5af7b1f1225d6535a9374c1d3cd", + "2/40": "745351b9d4905833052af63b85a6219d6ced256c2de69cf5e5350ae839a56b7f", + "2/41": "c5b0371dfadf63e2b14820badedb7b2b8c25d4226b6a160fb74dd9670edfd468", + "2/42": "6e01b00e423bb98dd6f779a87f7366386fef3b3a0efe43c57f9583e6c13b95ca", + "2/43": "bba397f9fb4149a1ed7487882ab697e6fa61d81ecd6acb81d1e51a29371e7a05", + "2/44": "0410120a402e5b1c523d482d2aeaba2d73bd69b7ef77b2cc6f41458388cc8a19", + "2/45": "d11aacac9555d182b44d94a7c7147ce67323d1adc0b006945e41961392d62819", + "2/46": "5c6f1b944d27851e0f565fd38d6740def950c99cf5ed50e148cadb756d10444c", + "2/47": "dd91f11c85adbb39482493eab381797ed22ac93c392f511867e888fdc8a44230", + "2/48": "1c62f23f07ed2240bff07716bada3dd68c12fffa808d6845c7d09db0d559a036", + "2/49": "baa6fae3bfe07598af5fe1c948a4c26c96226808285abdc4965a94c4f5eff5f3", + "2/abc": "bf45a420b3f7dcf62011f404c4e0002e89426b364d981e09850a15fc3f93e0e9", + "2/test-seed": "d1ee3a1388db6a71197deda0542321613d8efd3e755ae2eaaf00d2ace5f7a2af", + "2/a\"b": "17b70c2a6b5b53a1c845b6c80e16302ed4550abcd61f151815a3480ee3f0c102", + "2/รค๐Ÿ™‚": "32c9f7d99921b10df25e6be4f223f9ea71f46bac43a79cb61bccebc816378579", + "2/78d11f0d5a8bd74e510194e16e4b352a": "d1ce3b16d14b1b29420a77979e4e5e95b0c0673f3993ec25631bf130d01f5303", + "3/0": "7d0ea0fe01cc159dd3dfe161945ad4c7c596638299d5c11309671c6fb5f42ee1", + "3/1": "1228d0ee23b38fee2e799bec7c068eb40ec20a162575e8a712d5432f2a41faf9", + "3/2": "76d6b378dc58d27dd2fa48af547d86cea90ca2af9ffbb9bfe47b398ae7dfe0cf", + "3/3": "cb5f43e136785430c8992aaf19250f2e07b820f6efe44b6bdb6099de2feb5640", + "3/4": "902ea43eb94b7fcb528bc0bba2c9cc8d4818a1ac74f383bdce1bb84505a8b2e4", + "3/5": "1e22edf44669df9b1fa0eaecfd2bd9a5f4dc4e4731ac836f1193cd6ad50f232c", + "3/6": "acb48284a27f1fe6168a5acd3ac3f147598a7e17b20fb95d69a54081f87ecfbb", + "3/7": "4511b27038c1bb15bfb04c348bed0e04f4126a4660eb1e08a7bbc48ff572a819", + "3/8": "85507b892751125499d71b772a9b7c07727d196d13cc921ee411fa178b831b4a", + "3/9": "4d9c4320a93fcc5cb1e15c1780c0f4fd7b624a6b4838b7858a4fffa6e8e71972", + "3/10": "23cbad402c17f7c6e4230364b4895eca041df8e5c60363af0f079afc948caf6b", + "3/11": "4e861f4f66dd0140fb2ea82d76df9ffe9ab2bd6efea1ced054026d44bd4a4a17", + "3/12": "3981378699d2b87ca31fb43b5e12b2630f37b12d511b25531343f8a359912829", + "3/13": "c1210c2bf080befce84fa7e9f660c20a3f3315545a88049b62c66dd739349cd0", + "3/14": "f7422b243b16c92a728b1e2a0b253042936e3a1c831984ebf49ccc6c0cb61547", + "3/15": "3eedf73a9c1a97e132d0871edfb8bb9fc7d3ac7099b3bb5b2936d4fc12697265", + "3/16": "c2d2af4f288b1c51ec148637c7ae0e12bf8d664c8e3c70ccc275f506e3358800", + "3/17": "0c441f7a4aaccfa63b8e9e095542314efbbfd1fb3a45f5174e94e8fc91c34fa7", + "3/18": "34fbeac533b1189ea78de71781a867105f9374b980bd18d7af847d6429164a22", + "3/19": "ed10d865171999407820dece3000cc493a31b6457e69c797e7b95705618de12a", + "3/20": "fac5c37e72798f18e312f9da791a0e052866e5ec0efcb7d759965966d6a4b7fe", + "3/21": "44ba05fe982243e13439582f9170a2837717958eaf161c4ecca8ac5fd2c0c2bd", + "3/22": "0792ef2f2117e34d69045fd5f781d41c57900c874d27f94abcba31fd185938e3", + "3/23": "b9ccdd73fb731838979f834bafeb680553e7da3ae3098ae0c3665dd12d6dd7d8", + "3/24": "df55a6cc83b3727f45efe3a357f8af84c38e1a013db9a5d04f32729ef6988db5", + "3/25": "16129a04553f6493bbd8ab3ab1980df5088dd5f8386222f6b94e31a3fbd9fee3", + "3/26": "54e1677541933d69e7fb344a1523e33588dc3f8b6dbd8f026f462f38aa4bb4b8", + "3/27": "2b61cfdd5ed847ff382c9d8f3134f84c4385fd88e488af6e813ce4dc9992b0b0", + "3/28": "9694f7a5de8be07006ba40ce5aef5983947234e5fd0451f37d861e9092447806", + "3/29": "ecf6f183a26b9480f1198763f5e29497ee1537657250300100a32ee5afd93115", + "3/30": "d0dfe7d161c840fc924b35cc6917b64d5f974f36cf6a703068fea2b30e9748b8", + "3/31": "2ca5e5ce033869ce4c1be7e609c39e178469d6d255e1c2a9684542bc65a20159", + "3/32": "458348955e365757e4a0f027b15bad56e678a5151a9d6a1d2e8fafea9fae76e9", + "3/33": "1934d8780a974abcdc135babec5ce000c0c7c878bee92f250e4b624d2a4c6b29", + "3/34": "0acb9bc22de074ef085336bbb4dbed426a316d5ef25b89b8d6df774d39dd5f49", + "3/35": "c7ccf7873b90ffd2e3e164bff37264e3a3cad0dc84c5286a34681f92bb322c25", + "3/36": "e1b53318039266e9c292c610daf993abddd921c4335ec9a66b4dae970e236a1a", + "3/37": "358eab788f45910ff36d810408bccdee8aa1b3dd900db213902a465245f99bf3", + "3/38": "31b21b3a4f9b0b391343e286ca8d008d4573ab08b406fa6b77bdf00e2f80920b", + "3/39": "4039d6af19d466f4beb0f0f0b0a9c8ad77d27d5a94f9d0790d3a88f5629215ab", + "3/40": "0d4708412e39ef3723a10fba67a15bf3d8d0ac0db1912bafe65b5f75b2fbdf0d", + "3/41": "1948b71b8231449f7947f3e94d0f0918560321fdf15bed40a6c6bc34dd10c8e2", + "3/42": "7d9366f4a1283f7541f4b1dd45dbcad3cdfd824cac13214abe98fc27c7bae24e", + "3/43": "4ebff8f84b96443e19b84d652a7a6b22b93b4ebfc9c79fecb25aca365a75cd60", + "3/44": "9e04f12faad590e7e63fe9eb1c9f3feb77d552639e84316476a32a2b652ac906", + "3/45": "e103b2acfd229af679c8fc26cac28136fbc6e59bc00513bcfe2902b47cf0cd8e", + "3/46": "44959e142644edcbab628bd8d6f7a8f4a39d2f312e44d49bf1b050e89ef3ae85", + "3/47": "9cad9e862e497fade7bb72f08a76dcb465d74bb4e49492e019e20932bbd3f9d5", + "3/48": "4d43d15c416173c2d48456545ac2ab2970e9c8c24cf105c0aa8028b9fca09c35", + "3/49": "0975d1973f06d0bf87e8d3c7a7149948ec626be84663a5ac2c7f03e4cafebcd5", + "3/abc": "042cb2bc6fdfe66e8b07b61370ece79c70d3fad7c20c7e77ad9753f7cbccf2c9", + "3/test-seed": "ea7b8f76c8cef87ba1c39579f38024ac065c37f04188af2c7478c0ed5513b5c6", + "3/a\"b": "9abf6361465ac59c78ce474ed9289afc881d4eed5cd4c4a135799fa4770f193e", + "3/รค๐Ÿ™‚": "afd45e3d69ceb133bf2a7e619412cbc7f1329bec2715143d15496e433637e1c1", + "3/78d11f0d5a8bd74e510194e16e4b352a": "d942016262709754f4d295a217cee0c24b3ef66e7db1b02644fde948d6ef58b0", + "4/0": "7d0ea0fe01cc159dd3dfe161945ad4c7c596638299d5c11309671c6fb5f42ee1", + "4/1": "1228d0ee23b38fee2e799bec7c068eb40ec20a162575e8a712d5432f2a41faf9", + "4/2": "76d6b378dc58d27dd2fa48af547d86cea90ca2af9ffbb9bfe47b398ae7dfe0cf", + "4/3": "cb5f43e136785430c8992aaf19250f2e07b820f6efe44b6bdb6099de2feb5640", + "4/4": "902ea43eb94b7fcb528bc0bba2c9cc8d4818a1ac74f383bdce1bb84505a8b2e4", + "4/5": "1e22edf44669df9b1fa0eaecfd2bd9a5f4dc4e4731ac836f1193cd6ad50f232c", + "4/6": "acb48284a27f1fe6168a5acd3ac3f147598a7e17b20fb95d69a54081f87ecfbb", + "4/7": "4511b27038c1bb15bfb04c348bed0e04f4126a4660eb1e08a7bbc48ff572a819", + "4/8": "85507b892751125499d71b772a9b7c07727d196d13cc921ee411fa178b831b4a", + "4/9": "4d9c4320a93fcc5cb1e15c1780c0f4fd7b624a6b4838b7858a4fffa6e8e71972", + "4/10": "23cbad402c17f7c6e4230364b4895eca041df8e5c60363af0f079afc948caf6b", + "4/11": "4e861f4f66dd0140fb2ea82d76df9ffe9ab2bd6efea1ced054026d44bd4a4a17", + "4/12": "3981378699d2b87ca31fb43b5e12b2630f37b12d511b25531343f8a359912829", + "4/13": "c1210c2bf080befce84fa7e9f660c20a3f3315545a88049b62c66dd739349cd0", + "4/14": "f7422b243b16c92a728b1e2a0b253042936e3a1c831984ebf49ccc6c0cb61547", + "4/15": "3eedf73a9c1a97e132d0871edfb8bb9fc7d3ac7099b3bb5b2936d4fc12697265", + "4/16": "c2d2af4f288b1c51ec148637c7ae0e12bf8d664c8e3c70ccc275f506e3358800", + "4/17": "0c441f7a4aaccfa63b8e9e095542314efbbfd1fb3a45f5174e94e8fc91c34fa7", + "4/18": "34fbeac533b1189ea78de71781a867105f9374b980bd18d7af847d6429164a22", + "4/19": "ed10d865171999407820dece3000cc493a31b6457e69c797e7b95705618de12a", + "4/20": "fac5c37e72798f18e312f9da791a0e052866e5ec0efcb7d759965966d6a4b7fe", + "4/21": "44ba05fe982243e13439582f9170a2837717958eaf161c4ecca8ac5fd2c0c2bd", + "4/22": "0792ef2f2117e34d69045fd5f781d41c57900c874d27f94abcba31fd185938e3", + "4/23": "b9ccdd73fb731838979f834bafeb680553e7da3ae3098ae0c3665dd12d6dd7d8", + "4/24": "df55a6cc83b3727f45efe3a357f8af84c38e1a013db9a5d04f32729ef6988db5", + "4/25": "16129a04553f6493bbd8ab3ab1980df5088dd5f8386222f6b94e31a3fbd9fee3", + "4/26": "54e1677541933d69e7fb344a1523e33588dc3f8b6dbd8f026f462f38aa4bb4b8", + "4/27": "2b61cfdd5ed847ff382c9d8f3134f84c4385fd88e488af6e813ce4dc9992b0b0", + "4/28": "9694f7a5de8be07006ba40ce5aef5983947234e5fd0451f37d861e9092447806", + "4/29": "ecf6f183a26b9480f1198763f5e29497ee1537657250300100a32ee5afd93115", + "4/30": "d0dfe7d161c840fc924b35cc6917b64d5f974f36cf6a703068fea2b30e9748b8", + "4/31": "2ca5e5ce033869ce4c1be7e609c39e178469d6d255e1c2a9684542bc65a20159", + "4/32": "458348955e365757e4a0f027b15bad56e678a5151a9d6a1d2e8fafea9fae76e9", + "4/33": "1934d8780a974abcdc135babec5ce000c0c7c878bee92f250e4b624d2a4c6b29", + "4/34": "0acb9bc22de074ef085336bbb4dbed426a316d5ef25b89b8d6df774d39dd5f49", + "4/35": "c7ccf7873b90ffd2e3e164bff37264e3a3cad0dc84c5286a34681f92bb322c25", + "4/36": "e1b53318039266e9c292c610daf993abddd921c4335ec9a66b4dae970e236a1a", + "4/37": "358eab788f45910ff36d810408bccdee8aa1b3dd900db213902a465245f99bf3", + "4/38": "31b21b3a4f9b0b391343e286ca8d008d4573ab08b406fa6b77bdf00e2f80920b", + "4/39": "4039d6af19d466f4beb0f0f0b0a9c8ad77d27d5a94f9d0790d3a88f5629215ab", + "4/40": "0d4708412e39ef3723a10fba67a15bf3d8d0ac0db1912bafe65b5f75b2fbdf0d", + "4/41": "1948b71b8231449f7947f3e94d0f0918560321fdf15bed40a6c6bc34dd10c8e2", + "4/42": "7d9366f4a1283f7541f4b1dd45dbcad3cdfd824cac13214abe98fc27c7bae24e", + "4/43": "4ebff8f84b96443e19b84d652a7a6b22b93b4ebfc9c79fecb25aca365a75cd60", + "4/44": "9e04f12faad590e7e63fe9eb1c9f3feb77d552639e84316476a32a2b652ac906", + "4/45": "e103b2acfd229af679c8fc26cac28136fbc6e59bc00513bcfe2902b47cf0cd8e", + "4/46": "44959e142644edcbab628bd8d6f7a8f4a39d2f312e44d49bf1b050e89ef3ae85", + "4/47": "9cad9e862e497fade7bb72f08a76dcb465d74bb4e49492e019e20932bbd3f9d5", + "4/48": "4d43d15c416173c2d48456545ac2ab2970e9c8c24cf105c0aa8028b9fca09c35", + "4/49": "0975d1973f06d0bf87e8d3c7a7149948ec626be84663a5ac2c7f03e4cafebcd5", + "4/abc": "042cb2bc6fdfe66e8b07b61370ece79c70d3fad7c20c7e77ad9753f7cbccf2c9", + "4/test-seed": "ea7b8f76c8cef87ba1c39579f38024ac065c37f04188af2c7478c0ed5513b5c6", + "4/a\"b": "9abf6361465ac59c78ce474ed9289afc881d4eed5cd4c4a135799fa4770f193e", + "4/รค๐Ÿ™‚": "afd45e3d69ceb133bf2a7e619412cbc7f1329bec2715143d15496e433637e1c1", + "4/78d11f0d5a8bd74e510194e16e4b352a": "d942016262709754f4d295a217cee0c24b3ef66e7db1b02644fde948d6ef58b0", + "5/0": "7d0ea0fe01cc159dd3dfe161945ad4c7c596638299d5c11309671c6fb5f42ee1", + "5/1": "1228d0ee23b38fee2e799bec7c068eb40ec20a162575e8a712d5432f2a41faf9", + "5/2": "76d6b378dc58d27dd2fa48af547d86cea90ca2af9ffbb9bfe47b398ae7dfe0cf", + "5/3": "cb5f43e136785430c8992aaf19250f2e07b820f6efe44b6bdb6099de2feb5640", + "5/4": "902ea43eb94b7fcb528bc0bba2c9cc8d4818a1ac74f383bdce1bb84505a8b2e4", + "5/5": "1e22edf44669df9b1fa0eaecfd2bd9a5f4dc4e4731ac836f1193cd6ad50f232c", + "5/6": "acb48284a27f1fe6168a5acd3ac3f147598a7e17b20fb95d69a54081f87ecfbb", + "5/7": "4511b27038c1bb15bfb04c348bed0e04f4126a4660eb1e08a7bbc48ff572a819", + "5/8": "85507b892751125499d71b772a9b7c07727d196d13cc921ee411fa178b831b4a", + "5/9": "4d9c4320a93fcc5cb1e15c1780c0f4fd7b624a6b4838b7858a4fffa6e8e71972", + "5/10": "23cbad402c17f7c6e4230364b4895eca041df8e5c60363af0f079afc948caf6b", + "5/11": "4e861f4f66dd0140fb2ea82d76df9ffe9ab2bd6efea1ced054026d44bd4a4a17", + "5/12": "3981378699d2b87ca31fb43b5e12b2630f37b12d511b25531343f8a359912829", + "5/13": "c1210c2bf080befce84fa7e9f660c20a3f3315545a88049b62c66dd739349cd0", + "5/14": "f7422b243b16c92a728b1e2a0b253042936e3a1c831984ebf49ccc6c0cb61547", + "5/15": "3eedf73a9c1a97e132d0871edfb8bb9fc7d3ac7099b3bb5b2936d4fc12697265", + "5/16": "c2d2af4f288b1c51ec148637c7ae0e12bf8d664c8e3c70ccc275f506e3358800", + "5/17": "0c441f7a4aaccfa63b8e9e095542314efbbfd1fb3a45f5174e94e8fc91c34fa7", + "5/18": "34fbeac533b1189ea78de71781a867105f9374b980bd18d7af847d6429164a22", + "5/19": "ed10d865171999407820dece3000cc493a31b6457e69c797e7b95705618de12a", + "5/20": "fac5c37e72798f18e312f9da791a0e052866e5ec0efcb7d759965966d6a4b7fe", + "5/21": "44ba05fe982243e13439582f9170a2837717958eaf161c4ecca8ac5fd2c0c2bd", + "5/22": "0792ef2f2117e34d69045fd5f781d41c57900c874d27f94abcba31fd185938e3", + "5/23": "b9ccdd73fb731838979f834bafeb680553e7da3ae3098ae0c3665dd12d6dd7d8", + "5/24": "df55a6cc83b3727f45efe3a357f8af84c38e1a013db9a5d04f32729ef6988db5", + "5/25": "16129a04553f6493bbd8ab3ab1980df5088dd5f8386222f6b94e31a3fbd9fee3", + "5/26": "54e1677541933d69e7fb344a1523e33588dc3f8b6dbd8f026f462f38aa4bb4b8", + "5/27": "2b61cfdd5ed847ff382c9d8f3134f84c4385fd88e488af6e813ce4dc9992b0b0", + "5/28": "9694f7a5de8be07006ba40ce5aef5983947234e5fd0451f37d861e9092447806", + "5/29": "ecf6f183a26b9480f1198763f5e29497ee1537657250300100a32ee5afd93115", + "5/30": "d0dfe7d161c840fc924b35cc6917b64d5f974f36cf6a703068fea2b30e9748b8", + "5/31": "2ca5e5ce033869ce4c1be7e609c39e178469d6d255e1c2a9684542bc65a20159", + "5/32": "458348955e365757e4a0f027b15bad56e678a5151a9d6a1d2e8fafea9fae76e9", + "5/33": "1934d8780a974abcdc135babec5ce000c0c7c878bee92f250e4b624d2a4c6b29", + "5/34": "0acb9bc22de074ef085336bbb4dbed426a316d5ef25b89b8d6df774d39dd5f49", + "5/35": "c7ccf7873b90ffd2e3e164bff37264e3a3cad0dc84c5286a34681f92bb322c25", + "5/36": "e1b53318039266e9c292c610daf993abddd921c4335ec9a66b4dae970e236a1a", + "5/37": "358eab788f45910ff36d810408bccdee8aa1b3dd900db213902a465245f99bf3", + "5/38": "31b21b3a4f9b0b391343e286ca8d008d4573ab08b406fa6b77bdf00e2f80920b", + "5/39": "4039d6af19d466f4beb0f0f0b0a9c8ad77d27d5a94f9d0790d3a88f5629215ab", + "5/40": "0d4708412e39ef3723a10fba67a15bf3d8d0ac0db1912bafe65b5f75b2fbdf0d", + "5/41": "1948b71b8231449f7947f3e94d0f0918560321fdf15bed40a6c6bc34dd10c8e2", + "5/42": "7d9366f4a1283f7541f4b1dd45dbcad3cdfd824cac13214abe98fc27c7bae24e", + "5/43": "4ebff8f84b96443e19b84d652a7a6b22b93b4ebfc9c79fecb25aca365a75cd60", + "5/44": "9e04f12faad590e7e63fe9eb1c9f3feb77d552639e84316476a32a2b652ac906", + "5/45": "e103b2acfd229af679c8fc26cac28136fbc6e59bc00513bcfe2902b47cf0cd8e", + "5/46": "44959e142644edcbab628bd8d6f7a8f4a39d2f312e44d49bf1b050e89ef3ae85", + "5/47": "9cad9e862e497fade7bb72f08a76dcb465d74bb4e49492e019e20932bbd3f9d5", + "5/48": "4d43d15c416173c2d48456545ac2ab2970e9c8c24cf105c0aa8028b9fca09c35", + "5/49": "0975d1973f06d0bf87e8d3c7a7149948ec626be84663a5ac2c7f03e4cafebcd5", + "5/abc": "042cb2bc6fdfe66e8b07b61370ece79c70d3fad7c20c7e77ad9753f7cbccf2c9", + "5/test-seed": "ea7b8f76c8cef87ba1c39579f38024ac065c37f04188af2c7478c0ed5513b5c6", + "5/a\"b": "9abf6361465ac59c78ce474ed9289afc881d4eed5cd4c4a135799fa4770f193e", + "5/รค๐Ÿ™‚": "afd45e3d69ceb133bf2a7e619412cbc7f1329bec2715143d15496e433637e1c1", + "5/78d11f0d5a8bd74e510194e16e4b352a": "d942016262709754f4d295a217cee0c24b3ef66e7db1b02644fde948d6ef58b0" +} diff --git a/test/seed_stability_test.py b/test/seed_stability_test.py new file mode 100644 index 0000000..2aafbda --- /dev/null +++ b/test/seed_stability_test.py @@ -0,0 +1,72 @@ +""" +Makes sure that a seed and floor id always produce the same floor. + +The expected floors are stored as hashes in resources/floor_hashes.json. +If a change to the generation is intended, regenerate them with: + python test/seed_stability_test.py --update +""" + +import hashlib +import json +import os +import sys +import unittest +from typing import Dict + +_HASH_FILE = os.path.join(os.path.dirname(__file__), "resources", "floor_hashes.json") +_SEEDS = [str(number) for number in range(50)] + [ + "abc", + "test-seed", + 'a"b', + "รค๐Ÿ™‚", + "78d11f0d5a8bd74e510194e16e4b352a", +] +_FLOOR_IDS = range(6) + + +def _floor_hash(seed: str, floor_id: int) -> str: + # pylint: disable=import-outside-toplevel + from generators.generator import Generator + + generator = Generator(seed, "floor", stage_id=floor_id) + generator.generate() + canonical = json.dumps( + generator.to_dict(), sort_keys=True, separators=(",", ":"), ensure_ascii=False + ) + return hashlib.sha256(canonical.encode("utf-8")).hexdigest() + + +def _current_hashes() -> Dict[str, str]: + return { + f"{floor_id}/{seed}": _floor_hash(seed, floor_id) + for floor_id in _FLOOR_IDS + for seed in _SEEDS + } + + +class SeedStabilityTest(unittest.TestCase): + def test_seeds_produce_the_same_floors(self): + with open(_HASH_FILE, encoding="utf-8") as file: + expected = json.load(file) + + current = _current_hashes() + + changed = sorted(key for key in expected if current.get(key) != expected[key]) + self.assertEqual( + [], + changed, + f"{len(changed)} of {len(expected)} floors changed (floor id/seed). " + "Existing seeds must keep producing the same floors.", + ) + self.assertEqual(sorted(expected), sorted(current)) + + +if __name__ == "__main__": + if "--update" in sys.argv: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src")) + with open(_HASH_FILE, "w", encoding="utf-8") as hash_file: + json.dump(_current_hashes(), hash_file, indent=2, ensure_ascii=False) + hash_file.write("\n") + print(f"Updated {_HASH_FILE}") + else: + unittest.main() From 6b34b1447ad2b68582454a5f5cbb3a0c7d7dda09 Mon Sep 17 00:00:00 2001 From: Joltras <72395471+Joltras@users.noreply.github.com> Date: Tue, 3 Nov 2026 13:49:32 +0000 Subject: [PATCH 2/2] refactor: name the super secret room distance limit --- src/generators/generator.py | 6 +++--- src/utils/globals.py | 3 +++ src/utils/util_functions.py | 8 +++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/generators/generator.py b/src/generators/generator.py index 6febdcc..2188a27 100644 --- a/src/generators/generator.py +++ b/src/generators/generator.py @@ -318,13 +318,13 @@ def add_special_rooms(self, dead_ends: list) -> None: def place_super_secret_room(self) -> None: """ - Places a super secret room on the flor. + Places a super secret room on the floor. The super secret room should be as close as possible to the boss room but should not be adjacent to the boss room. - There should only have one adjacent room. + It should only have one adjacent room. """ floor = self._floor - distance_to_boss = 25 + distance_to_boss = my_globals.MAX_SUPER_SECRET_ROOM_DISTANCE_SQUARED candidate = None boss_room = floor.get_boss_room() for room in floor.get_rooms(): diff --git a/src/utils/globals.py b/src/utils/globals.py index acf3125..0829c48 100644 --- a/src/utils/globals.py +++ b/src/utils/globals.py @@ -63,6 +63,9 @@ class Color(Enum): FLOOR_WIDTH: int = 9 FLOOR_HEIGHT: int = 8 MAX_ROOMS: int = 15 +# The super secret room is only placed closer than this to the boss room +# (squared distance, 25 means a distance below 5 rooms) +MAX_SUPER_SECRET_ROOM_DISTANCE_SQUARED: int = 25 # Distance between start and boss room X_OFFSET = (FLOOR_WIDTH * ROOM_WIDTH) / 2 Y_OFFSET = 0 diff --git a/src/utils/util_functions.py b/src/utils/util_functions.py index 1f75fc0..0ec146c 100644 --- a/src/utils/util_functions.py +++ b/src/utils/util_functions.py @@ -4,7 +4,6 @@ import os import random -import math from typing import Tuple import utils.globals as my_globals @@ -37,14 +36,13 @@ def get_picture_for_room_type(room_type: RoomType): def calculate_room_amount(stage_id: int, rng: random.Random) -> int: """ Calculates the room amount. + The generator may place a few more rooms than this, + because it adds all neighbours of a room in one step. @param stage_id: id for the floor @param rng: random number generator to use :return: room amount """ - return min( - my_globals.MAX_ROOMS, - int(rng.randint(0, 1) + 5 + math.floor(stage_id * 10) / 3.0), - ) + return min(my_globals.MAX_ROOMS, rng.randint(0, 1) + 5 + stage_id * 10 // 3) def place_room(rng: random.Random) -> bool: