From f230af436c82272d3a896690b060a64c49f1b84b Mon Sep 17 00:00:00 2001 From: Kasey White Date: Fri, 3 Mar 2023 00:48:01 -0500 Subject: [PATCH] fix: scope issue with expect and function calls Add acceptance test 72 --- crates/aiken-lang/src/uplc.rs | 4 ++ examples/acceptance_tests/072/aiken.lock | 13 ++++++ examples/acceptance_tests/072/aiken.toml | 7 +++ examples/acceptance_tests/072/lib/tests.ak | 53 ++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 examples/acceptance_tests/072/aiken.lock create mode 100644 examples/acceptance_tests/072/aiken.toml create mode 100644 examples/acceptance_tests/072/lib/tests.ak diff --git a/crates/aiken-lang/src/uplc.rs b/crates/aiken-lang/src/uplc.rs index 345921ba..ac61732e 100644 --- a/crates/aiken-lang/src/uplc.rs +++ b/crates/aiken-lang/src/uplc.rs @@ -1812,6 +1812,10 @@ impl<'a> CodeGenerator<'a> { && !tipo.is_data() { let mut assert_vec = vec![]; + let mut scope = scope; + + scope.push(self.id_gen.next()); + self.recursive_assert_pattern( pattern, &mut assert_vec, diff --git a/examples/acceptance_tests/072/aiken.lock b/examples/acceptance_tests/072/aiken.lock new file mode 100644 index 00000000..0423f31b --- /dev/null +++ b/examples/acceptance_tests/072/aiken.lock @@ -0,0 +1,13 @@ +# This file was generated by Aiken +# You typically do not need to edit this file + +[[requirements]] +name = "aiken-lang/stdlib" +version = "main" +source = "github" + +[[packages]] +name = "aiken-lang/stdlib" +version = "main" +requirements = [] +source = "github" diff --git a/examples/acceptance_tests/072/aiken.toml b/examples/acceptance_tests/072/aiken.toml new file mode 100644 index 00000000..40b30534 --- /dev/null +++ b/examples/acceptance_tests/072/aiken.toml @@ -0,0 +1,7 @@ +name = "aiken-lang/acceptance_test_072" +version = "0.0.0" + +[[dependencies]] +name = 'aiken-lang/stdlib' +version = 'main' +source = 'github' diff --git a/examples/acceptance_tests/072/lib/tests.ak b/examples/acceptance_tests/072/lib/tests.ak new file mode 100644 index 00000000..d18bd5ca --- /dev/null +++ b/examples/acceptance_tests/072/lib/tests.ak @@ -0,0 +1,53 @@ +use aiken/transaction.{Datum, InlineDatum} + +type OwnerInfo { + pkh: ByteArray, + sc: ByteArray, +} + +type TokenInfo { + pid: ByteArray, + tkn: ByteArray, + amt: Int, +} + +type SwapInfo { + slip: Int, +} + +type OtherDatum { + owner: OwnerInfo, + have: TokenInfo, + want: TokenInfo, + info: SwapInfo, +} + +type Output { + datum: Datum, +} + +fn find_outbound_datum(possible_output: Option) -> Data { + when possible_output is { + Some(possible_output) -> + when possible_output.datum is { + InlineDatum(outbound_datum) -> outbound_datum + _ -> error @"expected outbound inline datum" + } + None -> error @"no outbound datum found" + } +} + +fn datum_a_cont() -> OtherDatum { + let owner: OwnerInfo = OwnerInfo { pkh: #"", sc: #"" } + let have: TokenInfo = TokenInfo { pid: #"", tkn: #"", amt: 100 } + let want: TokenInfo = TokenInfo { pid: #"acab", tkn: #"beef", amt: 50 } + let info: SwapInfo = SwapInfo { slip: 40 } + OtherDatum { owner, have, want, info } +} + +test foo() { + let outbound_datum = InlineDatum(datum_a_cont()) + let outbound_output = Some(Output { datum: outbound_datum }) + expect outbound_datum: OtherDatum = find_outbound_datum(outbound_output) + outbound_datum == datum_a_cont() +}