diff --git a/crates/aiken-project/src/blueprint/validator.rs b/crates/aiken-project/src/blueprint/validator.rs index 6a3bce86..f78d3d52 100644 --- a/crates/aiken-project/src/blueprint/validator.rs +++ b/crates/aiken-project/src/blueprint/validator.rs @@ -455,8 +455,8 @@ mod tests { "$ref": "#/definitions/test_module~1Input" } }, - "compiledCode": "59027f010000323232323232323232222323253330084a22930a99804a491856616c696461746f722072657475726e65642066616c736500136563253330083370e90000008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90010008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90020008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300949128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630060033253330073370e90000008991919191919299980898098010991924c646600200200a44a66602800229309919801801980b8011bae301500132533300e3370e900000089919299980a180b0010a4c2a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a6028002601800c2a6601e92128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300c005153300e4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602200260220046eb0c03c004c03c008c034004c01401054cc02124128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163005003230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "ff5b503bbcd7ed5fca26e803d69c09413bef905e72575443557f5a91", + "compiledCode": "5901be0100003232323232323232323232322223232533300b4a22930a998062491856616c696461746f722072657475726e65642066616c7365001365632533300b3370e90000008a99980798040020a4c2a6601800e2c2a66601666e1d20020011533300f3008004149854cc03001c5854ccc02ccdc3a40080022a66601e60100082930a998060038b0a998060030b180400199299980519b87480000044c8c8c8c8c8c94ccc050c0580084c8c926323300100100522533301700114984c8cc00c00cc068008dd7180c00099299980899b87480000044c8c94ccc05cc064008526153301401216375a602e002601c00c2a660240182c601c00a2a6602201e2c6eb8c050004c050008dd618090009809001180800098038020a998058028b1803801a4928436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740049011d4578706563746564206e6f206669656c647320666f7220436f6e737472002300737540024600a6ea80052401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564005734ae7155ceaab9e5573eae855d11", + "hash": "a2d6e5c1e686ffe47d6ad6d4c17df246d38169545c7d66af32c5aedc", "definitions": { "ByteArray": { "dataType": "bytes" @@ -636,8 +636,8 @@ mod tests { "$ref": "#/definitions/test_module~1Either$ByteArray_test_module~1Interval$Int" } }, - "compiledCode": "5901fe010000323232323232323232223253330064a22930a99803a4811856616c696461746f722072657475726e65642066616c736500136563253330063370e900000089919299980618070010a4c2a660129201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c601800260080062a66600c66e1d200200113232533300c300e002132498c94ccc024cdc3a400000226464a66601e60220042930a99806249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300700115330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300c0013004003153300749128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163004002230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "f45ef7cb07467b7bd4cbad2e5feecfd30ed5194b50026aba04a6692a", + "compiledCode": "59016f0100003232323232323232323232223253330084a22930a99804a4811856616c696461746f722072657475726e65642066616c736500136563253330083370e900000089919299980718080010a4c2a6601600e2c6eb8c038004c01800c54ccc020cdc3a400400226464a66601c60200042649319299980599b87480000044c8c94ccc044c04c008526153300e00a16375a602200260120042a66601666e1d20020011533300f3009002149854cc0312411d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c007163009001153300b00716300e00130060031533009004163006002490128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74004901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400230063754002460086ea80055cd2b9c5573aaae7955cfaba157441", + "hash": "6b2032fcc8875dfe34dc93e4c9709188e60734ad668a31866ff14487", "definitions": { "ByteArray": { "dataType": "bytes" @@ -890,8 +890,8 @@ mod tests { "$ref": "#/definitions/test_module~1Expr" } }, - "compiledCode": "5901be0100003232323232323232223253330054a22930a9980324811856616c696461746f722072657475726e65642066616c736500136563323001001223253330073370e900000089919299980698078010a4c2a660149201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601a002600c0042a66600e66e1d2002001132323232533300f301100213232498cc020020008cc01c01c00c54cc0312401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153330073370e9002000899191919299980798088010991924c660100100046600e00e0062a660189201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153300849128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300837540020044600a6ea80055cd2b9c5573aaae7955cfaba157441", - "hash": "dafa047eb117e2b4df02e3c3d500faf6164ffc10c6ef9405cfd77bbb", + "compiledCode": "590155010000323232323232323232223253330064a22930a99803a4811856616c696461746f722072657475726e65642066616c736500136563323001001223253330083370e900000089919299980718080010a4c2a660160102c6eb4c038004c01c00854ccc020cdc3a4004002264646464a6660206024004264649319804004001198038038018a998068050b18080009808001180700098038010a99980419b87480100044c8c8c8c94ccc040c0480084c8c9263300800800233007007003153300d00a1630100013010002300e0013007002153300949128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300937540020049201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400230053754002ae695ce2ab9d5573caae7d5d0aba21", + "hash": "32815bdafe7e6e86659e3f73eda8f176fd8ad17aeb2bfa4b1325f6eb", "definitions": { "Int": { "dataType": "integer" @@ -981,8 +981,8 @@ mod tests { "$ref": "#/definitions/test_module~1LinkedList$Int" } }, - "compiledCode": "59034301000032323232323232323222232323232533300a4a22930a99805a491856616c696461746f722072657475726e65642066616c73650013656300200533232232533300c3370e9000000899192999809180a00109924c600a0022a6601e9201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163012001300a0021533300c3370e9001000899191919299980a180b00109924c6464646600200200444a66603000229309919801801980d8011806980c8009bac3014002375c60240022a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163233760602a002602a602c0026eb0c050004c050008dd6980900098050010a99806a4928436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300a00130010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a660209201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301300130130023370e900118071baa301100130090021533300b3370e90010008a99980798048010a4c2a660189211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630090010053001001223253330093370e90000008991919192999808980980109924c6600e00e0022a6601c921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163007001230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "be815f61a39a2cb454eb24986ee22a14e5802d08ab83ea8cd4382651", + "compiledCode": "59023801000032323232323232323232323222232323232533300d4a22930a998072491856616c696461746f722072657475726e65642066616c73650013656300200533232232533300f3370e900000089919299980a980b80109924c600a0022a6602401a2c602a00260180042a66601e66e1d200200113232323253330173019002132498c8c8c8cc004004008894ccc06c00452613233003003301e002300d301c0013758602e0046eb8c05400454cc05003c58c8cdd8180c000980c180c8009bac30170013017002375a602a00260180042a660200142c601800260020024464a66601c66e1d200000113232323253330163018002132498cc01c01c00454cc04c03858c058004c058008cdc3a400460226ea8c050004c02c00854ccc038cdc3a40040022a66602460160042930a998078068b0a998078048b180580080298008009119299980619b87480000044c8c8c8c94ccc050c0580084c92633007007001153301100c1630140013014002375a602400260120042a66601866e1d2002001153330103009002149854cc03402c5854cc03401c58c02400524128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74004901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564002300737540024600a6ea800524011d4578706563746564206e6f206669656c647320666f7220436f6e737472005734ae7155ceaab9e5573eae855d11", + "hash": "1a255c216fd87dabb6b605ea72081f1138d5da6e8520cb9798a00e3a", "definitions": { "Bool": { "title": "Bool", diff --git a/crates/aiken-project/src/tests/gen_uplc.rs b/crates/aiken-project/src/tests/gen_uplc.rs index aaf93486..e6078066 100644 --- a/crates/aiken-project/src/tests/gen_uplc.rs +++ b/crates/aiken-project/src/tests/gen_uplc.rs @@ -1,6 +1,9 @@ use pretty_assertions::assert_eq; -use aiken_lang::ast::{Definition, Function, TypedFunction, TypedValidator}; +use aiken_lang::{ + ast::{Definition, Function, TypedFunction, TypedValidator}, + gen_uplc::builder::{CONSTR_INDEX_MISMATCH, CONSTR_NOT_EMPTY, TOO_MANY_ITEMS}, +}; use uplc::{ ast::{Constant, Data, DeBruijn, Name, Program, Term, Type}, builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER}, @@ -2846,9 +2849,7 @@ fn when_tuple_deconstruction() { .apply(Term::var("red_constr_fields")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string( - "List/Tuple/Constr contains more items than expected", - )), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("field_1") .apply(Term::un_i_data().apply( @@ -2866,13 +2867,9 @@ fn when_tuple_deconstruction() { .apply(Term::var("red")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string( - "Expected no fields for Constr", - )), + Term::Error.trace(Term::var(CONSTR_NOT_EMPTY)), ), - Term::Error.trace(Term::string( - "Constr index didn't match a type variant", - )), + Term::Error.trace(Term::var(CONSTR_INDEX_MISMATCH)), ), ) .lambda("subject") @@ -2898,9 +2895,7 @@ fn when_tuple_deconstruction() { Term::unit().lambda("_").apply( Term::var("expect_Thing").apply(Term::var("field_1")), ), - Term::Error.trace(Term::string( - "List/Tuple/Constr contains more items than expected", - )), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("field_1") .apply(Term::head_list().apply(Term::var("dat_constr_fields"))) @@ -2916,13 +2911,9 @@ fn when_tuple_deconstruction() { .apply(Term::var("dat")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string( - "Expected no fields for Constr", - )), + Term::Error.trace(Term::var(CONSTR_NOT_EMPTY)), ), - Term::Error.trace(Term::string( - "Constr index didn't match a type variant", - )), + Term::Error.trace(Term::var(CONSTR_INDEX_MISMATCH)), ), ) .lambda("subject") @@ -2939,9 +2930,7 @@ fn when_tuple_deconstruction() { .apply(Term::var("field_1_constr_fields")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string( - "List/Tuple/Constr contains more items than expected", - )), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("idx") .apply(Term::un_i_data().apply( @@ -2952,9 +2941,7 @@ fn when_tuple_deconstruction() { Term::var(CONSTR_FIELDS_EXPOSER) .apply(Term::var("field_1")), ), - Term::Error.trace(Term::string( - "Constr index didn't match a type variant", - )), + Term::Error.trace(Term::var(CONSTR_INDEX_MISMATCH)), ) .lambda("subject") .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("field_1"))) @@ -2973,12 +2960,20 @@ fn when_tuple_deconstruction() { .apply(Term::unconstr_data().apply(Term::var("x"))) .lambda("x"), ) + .lambda(CONSTR_INDEX_MISMATCH) + .apply(Term::string("Constr index didn't match a type variant")) + .lambda(TOO_MANY_ITEMS) + .apply(Term::string( + "List/Tuple/Constr contains more items than expected", + )) .lambda(CONSTR_INDEX_EXPOSER) .apply( Term::fst_pair() .apply(Term::unconstr_data().apply(Term::var("x"))) .lambda("x"), - ), + ) + .lambda(CONSTR_NOT_EMPTY) + .apply(Term::string("Expected no fields for Constr")), false, ); } @@ -3059,7 +3054,6 @@ fn when_tuple_empty_lists() { #[test] fn generic_validator_type_test() { - let error_string = "List/Tuple/Constr contains more items than expected"; let src = r#" type A { NoA @@ -3116,8 +3110,14 @@ fn generic_validator_type_test() { ) .lambda("subject") .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("r"))) - .delayed_if_else(Term::unit(), Term::Error.apply(Term::Error.force()).trace(Term::string("Validator returned false"))) - .lambda("_").apply( + .delayed_if_else( + Term::unit(), + Term::Error + .apply(Term::Error.force()) + .trace(Term::string("Validator returned false")), + ) + .lambda("_") + .apply( Term::var("__expect_A") .lambda("__expect_A") .apply( @@ -3129,9 +3129,7 @@ fn generic_validator_type_test() { .apply(Term::var("r")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string( - "Expected no fields for Constr", - )), + Term::Error.trace(Term::var(CONSTR_NOT_EMPTY)), ), Term::equals_integer() .apply(Term::integer(1.into())) @@ -3144,15 +3142,12 @@ fn generic_validator_type_test() { Term::var("__expect_B") .apply(Term::var("field_B")), ), - Term::Error - .trace(Term::string("List/Tuple/Constr contains more items than expected")), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("field_B") .apply(Term::head_list().apply(Term::var("tail_1"))) .lambda("tail_1") - .apply( - Term::tail_list().apply(Term::var("r_fields")), - ) + .apply(Term::tail_list().apply(Term::var("r_fields"))) .lambda("field_0") .apply( Term::equals_integer() @@ -3160,9 +3155,8 @@ fn generic_validator_type_test() { .apply( Term::fst_pair().apply( Term::unconstr_data().apply( - Term::head_list().apply( - Term::var("r_fields"), - ), + Term::head_list() + .apply(Term::var("r_fields")), ), ), ) @@ -3173,9 +3167,7 @@ fn generic_validator_type_test() { Term::var(CONSTR_FIELDS_EXPOSER) .apply(Term::var("r")), ), - Term::Error.trace(Term::string( - "Constr index didn't match a type variant", - )), + Term::Error.trace(Term::var(CONSTR_INDEX_MISMATCH)), ), ) .lambda("subject") @@ -3192,20 +3184,17 @@ fn generic_validator_type_test() { .apply(Term::var("B_fields")) .delayed_choose_list( Term::unit(), - Term::Error.trace(Term::string(error_string)), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("something") .apply( Term::equals_integer() .apply(Term::integer(0.into())) - .apply( - Term::fst_pair().apply( - Term::unconstr_data().apply( - Term::head_list() - .apply(Term::var("B_fields")), - ), + .apply(Term::fst_pair().apply( + Term::unconstr_data().apply( + Term::head_list().apply(Term::var("B_fields")), ), - ) + )) .delayed_if_else(Term::unit(), Term::Error), ) .lambda("B_fields") @@ -3213,9 +3202,7 @@ fn generic_validator_type_test() { Term::var(CONSTR_FIELDS_EXPOSER) .apply(Term::var("field_B")), ), - Term::Error.trace(Term::string( - "Constr index didn't match a type variant", - )), + Term::Error.trace(Term::var(CONSTR_INDEX_MISMATCH)), ) .lambda("subject") .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("field_B"))) @@ -3224,11 +3211,17 @@ fn generic_validator_type_test() { .apply(Term::var("r")), ) .lambda("r") - .apply( - Term::var("r"), - ) + .apply(Term::var("r")) .lambda("_ctx") .lambda("r") + .lambda(CONSTR_NOT_EMPTY) + .apply(Term::string("Expected no fields for Constr")) + .lambda(CONSTR_INDEX_MISMATCH) + .apply(Term::string("Constr index didn't match a type variant")) + .lambda(TOO_MANY_ITEMS) + .apply(Term::string( + "List/Tuple/Constr contains more items than expected", + )) .lambda(CONSTR_FIELDS_EXPOSER) .apply( Term::snd_pair() @@ -3404,8 +3397,7 @@ fn record_update_output_2_vals() { Data::constr(1, vec![]), ], ))) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_fields_exposer(), false, ); } @@ -3506,8 +3498,7 @@ fn record_update_output_1_val() { Data::constr(1, vec![]), ], ))) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_fields_exposer(), false, ); } @@ -3604,8 +3595,7 @@ fn record_update_output_first_last_val() { Data::constr(1, vec![]), ], ))) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_fields_exposer(), false, ); } @@ -3670,8 +3660,7 @@ fn list_fields_unwrap() { Term::bool(true), Term::bool(true).if_else(Term::bool(false), Term::bool(true)), ) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_fields_exposer(), false, ); } @@ -4898,7 +4887,6 @@ fn list_clause_with_assign2() { 0, vec![Data::integer(1.into())], )]))) - .constr_fields_exposer() .constr_index_exposer(), false, ); @@ -4954,9 +4942,7 @@ fn opaque_value_in_datum() { .apply( Term::unmap_data().apply(Term::snd_pair().apply(Term::var("tuple_item_0"))), ), - Term::Error.trace(Term::string( - "List/Tuple/Constr contains more items than expected", - )), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("tuple_item_0") .apply(Term::head_list().apply(Term::var("val"))) @@ -5010,9 +4996,7 @@ fn opaque_value_in_datum() { .lambda("pair_outer"), ), ), - Term::Error.trace(Term::string( - "List/Tuple/Constr contains more items than expected", - )), + Term::Error.trace(Term::var(TOO_MANY_ITEMS)), ) .lambda("a") .apply( @@ -5065,7 +5049,11 @@ fn opaque_value_in_datum() { .lambda("red") .lambda("dat") .constr_fields_exposer() - .constr_index_exposer(), + .constr_index_exposer() + .lambda(TOO_MANY_ITEMS) + .apply(Term::string( + "List/Tuple/Constr contains more items than expected", + )), false, ); } @@ -5162,8 +5150,7 @@ fn opaque_value_in_test() { )])) .into(), )])) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_fields_exposer(), false, ); } @@ -5192,8 +5179,7 @@ fn expect_none() { .apply(Term::Constant( Constant::Data(Data::constr(1, vec![])).into(), )) - .constr_index_exposer() - .constr_fields_exposer(), + .constr_index_exposer(), false, ); } @@ -5400,8 +5386,8 @@ fn tuple_2_match() { Term::bool(true), Term::bool(true).if_else(Term::bool(false), Term::bool(true)), ) - .constr_fields_exposer() - .constr_index_exposer(), + .constr_index_exposer() + .constr_fields_exposer(), false, ); }