diff --git a/console/algorithms/src/poseidon/mod.rs b/console/algorithms/src/poseidon/mod.rs index b74b21a3e2..c780dc9dbd 100644 --- a/console/algorithms/src/poseidon/mod.rs +++ b/console/algorithms/src/poseidon/mod.rs @@ -170,4 +170,253 @@ mod tests { single_rate_test::<7>(); single_rate_test::<8>(); } + + #[test] + fn test_suite_hash2() { + fn test_case_hash2(index: u8, input: Vec>) { + let poseidon2 = Poseidon2::::setup("Poseidon2").unwrap(); + assert_snapshot("test_hash", format!("rate_2_test_{index}"), poseidon2.hash(&input).unwrap()); + } + test_case_hash2(0, vec![]); + test_case_hash2(1, vec![Field::::from_u8(0)]); + test_case_hash2(2, vec![Field::::from_u8(1)]); + test_case_hash2(3, vec![Field::::from_u8(0), Field::::from_u8(1)]); + test_case_hash2(4, vec![Field::::from_u8(7), Field::::from_u8(6)]); + } + + #[test] + fn test_suite_hash4() { + fn test_case_hash4(index: u8, input: Vec>) { + let poseidon4 = Poseidon4::::setup("Poseidon4").unwrap(); + assert_snapshot("test_hash", format!("rate_4_test_{index}"), poseidon4.hash(&input).unwrap()); + } + test_case_hash4(0, vec![]); + test_case_hash4(1, vec![Field::::from_u8(0)]); + test_case_hash4(2, vec![Field::::from_u8(1)]); + test_case_hash4(3, vec![Field::::from_u8(0), Field::::from_u8(1)]); + test_case_hash4(4, vec![Field::::from_u8(7), Field::::from_u8(6)]); + test_case_hash4(5, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + ]); + test_case_hash4(6, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + Field::::from_str( + "1806278863067630397941269234951941896370617486625414347832536440203404317871field", + ) + .unwrap(), + ]); + test_case_hash4(7, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + Field::::from_str( + "1806278863067630397941269234951941896370617486625414347832536440203404317871field", + ) + .unwrap(), + Field::::from_str( + "4017177598231920767921734423139954103557056461408532722673217828464276314809field", + ) + .unwrap(), + ]); + } + + #[test] + fn test_suite_hash8() { + fn test_case_hash8(index: u16, input: Vec>) { + let poseidon8 = Poseidon8::::setup("Poseidon8").unwrap(); + assert_snapshot("test_hash", format!("rate_8_test_{index}"), poseidon8.hash(&input).unwrap()); + } + test_case_hash8(0, vec![]); + test_case_hash8(1, vec![Field::::from_u8(0)]); + test_case_hash8(2, vec![Field::::from_u8(1)]); + test_case_hash8(3, vec![Field::::from_u8(0), Field::::from_u8(1)]); + test_case_hash8(4, vec![Field::::from_u8(7), Field::::from_u8(6)]); + test_case_hash8(5, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + ]); + test_case_hash8(6, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + Field::::from_str( + "1806278863067630397941269234951941896370617486625414347832536440203404317871field", + ) + .unwrap(), + ]); + test_case_hash8(7, vec![ + Field::::from_str( + "3801852864665033841774715284518384682376829752661853198612247855579120198106field", + ) + .unwrap(), + Field::::from_str( + "8354898322875240371401674517397790035008442020361740574117886421279083828480field", + ) + .unwrap(), + Field::::from_str( + "4810388512520169167962815122521832339992376865086300759308552937986944510606field", + ) + .unwrap(), + Field::::from_str( + "1806278863067630397941269234951941896370617486625414347832536440203404317871field", + ) + .unwrap(), + Field::::from_str( + "4017177598231920767921734423139954103557056461408532722673217828464276314809field", + ) + .unwrap(), + ]); + test_case_hash8(8, vec![ + Field::::from_str( + "2241061724039470158487229089505123379386376040366677537043719491567584322339field", + ) + .unwrap(), + Field::::from_str( + "4450395467941419565906844040025562669400620759737863109185235386261110553073field", + ) + .unwrap(), + Field::::from_str( + "3763549180544198711495347718218896634621699987767108409942867882747700142403field", + ) + .unwrap(), + Field::::from_str( + "1834649076610684411560795826346579299134200286711220272747136514724202486145field", + ) + .unwrap(), + Field::::from_str( + "3330794675297759513930533281299019673013197332462213086257974185952740704073field", + ) + .unwrap(), + Field::::from_str( + "5929621997900969559642343088519370677943323262633114245367700983937202243619field", + ) + .unwrap(), + Field::::from_str( + "8211311402459203356251863974142333868284569297703150729090604853345946857386field", + ) + .unwrap(), + ]); + test_case_hash8(9, vec![ + Field::::from_str( + "160895951580389706659907027483151875213333010019551276998320919296228647317field", + ) + .unwrap(), + Field::::from_str( + "8334099740396373026754940038411748941117628023990297711605274995172393663866field", + ) + .unwrap(), + Field::::from_str( + "6508516067551208838086421306235504440162527555399726948591414865066786644888field", + ) + .unwrap(), + Field::::from_str( + "5260580011132523115913756761919139190330166964648541423363604516046903841683field", + ) + .unwrap(), + Field::::from_str( + "1066299182733912299977577599302716102002738653010828827086884529157392046228field", + ) + .unwrap(), + Field::::from_str( + "1977519953625589014039847898215240724041194773120013187722954068145627219929field", + ) + .unwrap(), + Field::::from_str( + "1618348632868002512910764605250139381231860094469042556990470848701700964713field", + ) + .unwrap(), + Field::::from_str( + "1157459381876765943377450451674060447297483544491073402235960067133285590974field", + ) + .unwrap(), + ]); + test_case_hash8(10, vec![ + Field::::from_str( + "3912308888616251672812272013988802988420414245857866136212784631403027079860field", + ) + .unwrap(), + Field::::from_str( + "4100923705771018951561873336835055979905965765839649442185404560120892958216field", + ) + .unwrap(), + Field::::from_str( + "5701101373789959818781445339314572139971317958997296225671698446757742149719field", + ) + .unwrap(), + Field::::from_str( + "5785597627944719799683455467917641287692417422465938462034769734951914291948field", + ) + .unwrap(), + Field::::from_str( + "214818498460401597228033958287537426429167258531438668351703993840760770582field", + ) + .unwrap(), + Field::::from_str( + "4497884203527978976088488455523871581608892729212445595385399904032800522087field", + ) + .unwrap(), + Field::::from_str( + "4010331535874074900042223641934450423780782982190514529696596753456937384201field", + ) + .unwrap(), + Field::::from_str( + "6067637133445382691713836557146174628934072680692724940823629181144890569742field", + ) + .unwrap(), + Field::::from_str( + "5966421531117752671625849775894572561179958822813329961720805067254995723444field", + ) + .unwrap(), + ]); + } } diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_0.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_0.snap new file mode 100644 index 0000000000..3a9206b65c --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_0.snap @@ -0,0 +1 @@ +890528275010128413086262374581080260861073041656622537351850370623612770892field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_1.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_1.snap new file mode 100644 index 0000000000..f168451598 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_1.snap @@ -0,0 +1 @@ +5628341397010129094749668483581880102727432924493934736184943293239516955115field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_2.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_2.snap new file mode 100644 index 0000000000..bd4d43c89b --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_2.snap @@ -0,0 +1 @@ +8157139884333238590486942177518291201805404831318752263970723012511043776504field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_3.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_3.snap new file mode 100644 index 0000000000..df1d74d6e2 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_3.snap @@ -0,0 +1 @@ +1264503312579512465189393860390753485466098990459556420139454725533509612591field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_4.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_4.snap new file mode 100644 index 0000000000..4fefae5666 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_2_test_4.snap @@ -0,0 +1 @@ +610307558855046745962283397484544098131504333994299967172265018394298942553field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_0.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_0.snap new file mode 100644 index 0000000000..091fb2acd5 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_0.snap @@ -0,0 +1 @@ +1044346838034619416100171813313106342224256770546574686139345274096660160611field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_1.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_1.snap new file mode 100644 index 0000000000..9eaae5fd62 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_1.snap @@ -0,0 +1 @@ +6531918078649604677267704629524208386557917803204512136246020129886969612813field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_2.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_2.snap new file mode 100644 index 0000000000..4974beeb00 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_2.snap @@ -0,0 +1 @@ +4426996492654533614386079842002262353437097961897230015892590642692830916891field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_3.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_3.snap new file mode 100644 index 0000000000..e93255bfd3 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_3.snap @@ -0,0 +1 @@ +3515567246660071748861271187713830429704652891229797018766869690557265012151field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_4.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_4.snap new file mode 100644 index 0000000000..8d8b56b478 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_4.snap @@ -0,0 +1 @@ +6569866994757293255004300918458370975674559167201047636575858551784982288595field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_5.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_5.snap new file mode 100644 index 0000000000..a2c326b740 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_5.snap @@ -0,0 +1 @@ +87141345289194987249335251035288105774877062220257664575645549134632926482field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_6.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_6.snap new file mode 100644 index 0000000000..90b305b74c --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_6.snap @@ -0,0 +1 @@ +7213538381157479600695819072074313481664544179359574938537072092346114865618field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_7.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_7.snap new file mode 100644 index 0000000000..ce42b96e5c --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_4_test_7.snap @@ -0,0 +1 @@ +5481099192588700791287898101517060190977970633110857260811993991553610949275field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_0.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_0.snap new file mode 100644 index 0000000000..7b66e9f380 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_0.snap @@ -0,0 +1 @@ +1567761742253784763517697634212670888744157690807242184088612393580063919530field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_1.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_1.snap new file mode 100644 index 0000000000..6e8f55f836 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_1.snap @@ -0,0 +1 @@ +4116380618505203139735709763188062899546807129226239980574382125889245087784field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_10.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_10.snap new file mode 100644 index 0000000000..16f625fbe0 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_10.snap @@ -0,0 +1 @@ +305373231140119141495771730195166660114047796312466197355241017473154264594field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_2.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_2.snap new file mode 100644 index 0000000000..5904866362 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_2.snap @@ -0,0 +1 @@ +1602821949296022806146270121391383580291702991974340780933114647223620852779field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_3.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_3.snap new file mode 100644 index 0000000000..337fb8053c --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_3.snap @@ -0,0 +1 @@ +4504853075224575973859580682353724684440391731949662062689299393698522574250field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_4.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_4.snap new file mode 100644 index 0000000000..d58a18f390 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_4.snap @@ -0,0 +1 @@ +2011084681212961452311333305005509211229919616031257660941313625311987279984field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_5.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_5.snap new file mode 100644 index 0000000000..2bf7340576 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_5.snap @@ -0,0 +1 @@ +2441207636122714306371856624370101512638654024941597476504350040586876819967field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_6.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_6.snap new file mode 100644 index 0000000000..cbe5938b6d --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_6.snap @@ -0,0 +1 @@ +6088573564989104999418724140351215790250870264476768543870720179680005600079field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_7.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_7.snap new file mode 100644 index 0000000000..ab14ebd888 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_7.snap @@ -0,0 +1 @@ +5831342285401093988805641165492026817697793896414496472388751494052459296879field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_8.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_8.snap new file mode 100644 index 0000000000..9f32867b97 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_8.snap @@ -0,0 +1 @@ +1444892038274156943837009734886522214149622494611671083296024163883829362979field \ No newline at end of file diff --git a/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_9.snap b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_9.snap new file mode 100644 index 0000000000..5d34904771 --- /dev/null +++ b/console/algorithms/src/poseidon/resources/test_hash/rate_8_test_9.snap @@ -0,0 +1 @@ +1194605944695343789228228597749032243744971209446840517486291637780197055440field \ No newline at end of file