Review & fix acceptance tests

Temporarily using the 'specialize-dict-key' branch from the stdlib
  which makes use of Pair where relevant. Once this is merged back into
  'main' we should update the acceptance test toml files to keep getting
  them automatically upgraded.

  This commit also fixes an oversight in the reification of data-types
  now properly distinguishing between pairs and 2-tuples.

  Co-authored-by: Microproofs <kasey.white@cardanofoundation.org>
This commit is contained in:
KtorZ 2024-04-18 20:20:20 +02:00 committed by Kasey
parent 03a5a9293c
commit 1091eba3c3
43 changed files with 114 additions and 142 deletions

View File

@ -5,8 +5,8 @@ use crate::{
},
expr::TypedExpr,
tipo::{
fields::FieldMap, AccessorsMap, RecordAccessor, Type, TypeAliasAnnotation, TypeConstructor,
TypeInfo, TypeVar, ValueConstructor, ValueConstructorVariant,
fields::FieldMap, Type, TypeAliasAnnotation, TypeConstructor, TypeInfo, TypeVar,
ValueConstructor, ValueConstructorVariant,
},
IdGenerator,
};
@ -343,59 +343,6 @@ pub fn prelude(id_gen: &IdGenerator) -> TypeInfo {
.types_constructors
.insert(PAIR.to_string(), vec![PAIR.to_string()]);
let mut pair_fields = HashMap::new();
pair_fields.insert("fst".to_string(), (0, Span::empty()));
pair_fields.insert("snd".to_string(), (1, Span::empty()));
prelude.values.insert(
PAIR.to_string(),
ValueConstructor::public(
function(
vec![fst_parameter.clone(), snd_parameter.clone()],
pair(fst_parameter.clone(), snd_parameter.clone()),
),
ValueConstructorVariant::Record {
module: "".into(),
name: PAIR.to_string(),
field_map: Some(FieldMap {
arity: 2,
fields: pair_fields,
is_function: false,
}),
arity: 2,
location: Span::empty(),
constructors_count: 1,
},
),
);
let mut accessors = HashMap::new();
accessors.insert(
"fst".to_string(),
RecordAccessor {
index: 0,
label: "fst".to_string(),
tipo: fst_parameter.clone(),
},
);
accessors.insert(
"snd".to_string(),
RecordAccessor {
index: 1,
label: "snd".to_string(),
tipo: snd_parameter.clone(),
},
);
prelude.accessors.insert(
PAIR.to_string(),
AccessorsMap {
public: true,
tipo: pair(fst_parameter.clone(), snd_parameter.clone()),
accessors,
},
);
// String
prelude.types.insert(
STRING.to_string(),

View File

@ -793,11 +793,10 @@ impl UntypedExpr {
},
uplc::ast::Constant::ProtoPair(_, _, left, right) => match tipo {
Type::Tuple { elems, .. } => Ok(UntypedExpr::Tuple {
location: Span::empty(),
elems: [left.as_ref(), right.as_ref()]
Type::Pair { fst, snd, .. } => {
let elems = [left.as_ref(), right.as_ref()]
.into_iter()
.zip(elems)
.zip([fst, snd])
.map(|(arg, arg_type)| {
UntypedExpr::do_reify_constant(
generics,
@ -806,10 +805,16 @@ impl UntypedExpr {
arg_type,
)
})
.collect::<Result<Vec<_>, _>>()?,
}),
.collect::<Result<Vec<_>, _>>()?;
Ok(UntypedExpr::Pair {
location: Span::empty(),
fst: elems.first().unwrap().to_owned().into(),
snd: elems.last().unwrap().to_owned().into(),
})
}
_ => Err(format!(
"invalid type annotation. expected Tuple but got: {tipo:?}"
"invalid type annotation. expected Pair but got: {tipo:?}"
)),
},
@ -904,9 +909,10 @@ impl UntypedExpr {
location: Span::empty(),
elements: kvs
.into_iter()
.map(|(k, v)| UntypedExpr::Tuple {
.map(|(k, v)| UntypedExpr::Pair {
location: Span::empty(),
elems: vec![UntypedExpr::reify_blind(k), UntypedExpr::reify_blind(v)],
fst: UntypedExpr::reify_blind(k).into(),
snd: UntypedExpr::reify_blind(v).into(),
})
.collect::<Vec<_>>(),
tail: None,
@ -1022,6 +1028,21 @@ impl UntypedExpr {
})
.collect::<Result<Vec<_>, _>>()?,
}),
Type::Pair { fst, snd, .. } => {
let mut elems = args
.into_iter()
.zip([fst, snd])
.map(|(arg, arg_type)| {
UntypedExpr::do_reify_data(generics, data_types, arg, arg_type)
})
.collect::<Result<Vec<_>, _>>()?;
Ok(UntypedExpr::Pair {
location: Span::empty(),
fst: elems.remove(0).into(),
snd: elems.remove(0).into(),
})
}
_ => Err(format!(
"invalid type annotation. expected List but got: {tipo:?}"
)),

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569180, nanos_since_epoch = 895108000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463885, nanos_since_epoch = 953327000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [
@ -42,8 +42,8 @@
"$ref": "#/definitions/Data"
}
},
"compiledCode": "58d501000032323232323232222533300432330010013758601460166016600e6ea8c028c01cdd50011129998048008a501325333007333007533300a3253330083370e900118049baa00114bd6f7b63009bab300d300a375400264660020026eacc034c038c028dd518068019129998060008a60103d87a80001323232533300c3371e91105000000000000375c601a006266e95200033010374c00297ae01330050050023756601a0046020004601c00229445282504a229444cc00c00c004c030004526136565734aae7555cf2ab9f5740ae855d101",
"hash": "416db3eec35a0e94198a5123de948b773f98d4fcba87f581598a8068"
"compiledCode": "58d601000032323232323232222533300432330010013758601460166016600e6ea8c028c01cdd50011129998048008a501325333007333007533300a3253330083370e900118049baa00114bd7009bac300d300a375400264660020026eb0c034c038c028dd518068019129998060008a6103d87a80001323232533300c3371e91105000000000000375c6022006266e95200033010374e00297ae013300500500237586020602200460200046eb0c0380045288a504a094452889980180180098060008a4c26cacae6955ceaab9e5573eae815d0aba201",
"hash": "7726e9cfbd734a0aa846a7fb1648199ae7d746b0ce123c6c6df780ca"
}
],
"definitions": {

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569179, nanos_since_epoch = 784240000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463884, nanos_since_epoch = 765100000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569192, nanos_since_epoch = 806001000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463888, nanos_since_epoch = 383357000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569192, nanos_since_epoch = 805967000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463890, nanos_since_epoch = 965623000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569179, nanos_since_epoch = 348000000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463887, nanos_since_epoch = 961778000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -6,7 +6,7 @@ type Foo {
}
fn get_constr(data: Data) -> Int {
builtin.un_constr_data(data).fst
builtin.un_constr_data(data).1st
}
test foo() {
@ -23,7 +23,7 @@ fn map(list: List<a>, f: fn(a) -> b) -> List<b> {
}
fn get_fields(data: Data) -> List<Int> {
builtin.un_constr_data(data).snd
builtin.un_constr_data(data).2nd
|> map(builtin.un_i_data)
}

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569194, nanos_since_epoch = 888685000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463902, nanos_since_epoch = 215633000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569186, nanos_since_epoch = 741545000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463897, nanos_since_epoch = 385755000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569179, nanos_since_epoch = 533207000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463893, nanos_since_epoch = 847358000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569178, nanos_since_epoch = 711093000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463886, nanos_since_epoch = 284148000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569181, nanos_since_epoch = 605261000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463884, nanos_since_epoch = 163138000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569187, nanos_since_epoch = 164467000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463896, nanos_since_epoch = 514093000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569187, nanos_since_epoch = 610647000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463896, nanos_since_epoch = 410684000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569191, nanos_since_epoch = 273641000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463899, nanos_since_epoch = 4921000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569186, nanos_since_epoch = 96782000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463884, nanos_since_epoch = 166567000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [
@ -31,8 +31,8 @@
}
}
],
"compiledCode": "5901ae010000323232323232322322232323225333009323232533300c3007300d3754002264646464a666026602c00426464a666024601a60266ea803854ccc048c8cc004004018894ccc05c004528099299980a99baf301a30173754603400402429444cc00c00c004c06800454ccc048c0300044cdc78010080a501616375a60260046eb8c04400458c050004cc88c94ccc044c02cc048dd50008a5eb7bdb1804dd5980b18099baa001323300100100322533301500114c0103d87a8000132323253330153371e00c6eb8c05800c4cdd2a4000660326e980052f5c026600a00a0046eacc058008c064008c05c004c8cc004004dd5980a180a980a980a980a8019129998098008a5eb7bdb1804c8c8c8c94ccc050cdc7a45000021003133018337606ea4008dd3000998030030019bab3015003375c6026004602e004602a0026eb8c04cc040dd50019bac3012001300e37540042c60206022004601e00260166ea80045261365632533300830030011533300b300a37540082930b0a99980418010008a99980598051baa00414985858c020dd50019b8748008dc3a40006eb80055cd2ab9d5573caae7d5d02ba15745",
"hash": "c537a66202fafb789b2e76c6a5430b53b0069e223ba8ad4b5b793d51"
"compiledCode": "5901bc010000323232323232322322232323225333009323232533300c3007300d3754002264646464a666026602c00426464a666024601a60266ea803854ccc048c8cc004004018894ccc05c004528099299980a99baf301a30173754603400402429444cc00c00c004c06800454ccc048c0300044cdc78010080a501616375a602c602e0046eb8c05400458dd6180a0009991192999808980598091baa00114bd7009bac301630133754002646600200200644a66602a002298103d87a8000132323253330153371e00c6eb8c06800c4cdd2a4000660326e9c0052f5c026600a00a0046eb0c064c068008c064008dd6180b80099198008009bac3014301530153015301500322533301300114bd70099191919299980a19b8f4881000021003133018374e660306ea4008cc060dd3800a5eb80cc01801800cdd6180c180c8019bae301700230170023758602a0026eb8c04cc040dd50019bac3012001300e37540042c60206022004601e00260166ea80045261365632533300830030011533300b300a37540082930b0a99980418010008a99980598051baa00414985858c020dd50019b8748008dc3a40006eb80055cd2ab9d5573caae7d5d02ba15745",
"hash": "3dea1be2920aef692e0bcb894a17a984541682359c8c2b04679fca75"
}
],
"definitions": {

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569178, nanos_since_epoch = 275562000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463891, nanos_since_epoch = 684027000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569180, nanos_since_epoch = 807185000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463887, nanos_since_epoch = 129564000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -3,14 +3,14 @@
[[requirements]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
source = "github"
[[packages]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569180, nanos_since_epoch = 976274000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@specialize-dict-key" = [{ secs_since_epoch = 1713463739, nanos_since_epoch = 865019000 }, "4a03ebbbc134cedfe1bf03b59d5ed476f4dd97a769dc259552a9086e786bb108"]

View File

@ -4,5 +4,5 @@ description = ""
[[dependencies]]
name = 'aiken-lang/stdlib'
version = 'main'
version = 'specialize-dict-key'
source = 'github'

View File

@ -24,6 +24,6 @@ test tuple_when() {
}
test t() {
trace cbor.diagnostic(list.map([(#"", 20)], snd_pair))
trace cbor.diagnostic(list.map([Pair(#"", 20)], snd_pair))
True
}

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569179, nanos_since_epoch = 891129000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463893, nanos_since_epoch = 54580000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -3,14 +3,14 @@
[[requirements]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
source = "github"
[[packages]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569182, nanos_since_epoch = 746568000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@specialize-dict-key" = [{ secs_since_epoch = 1713463624, nanos_since_epoch = 244261000 }, "4a03ebbbc134cedfe1bf03b59d5ed476f4dd97a769dc259552a9086e786bb108"]

View File

@ -3,6 +3,6 @@ version = "0.0.0"
description = ""
[[dependencies]]
name = 'aiken-lang/stdlib'
version = 'main'
source = 'github'
name = "aiken-lang/stdlib"
version = "specialize-dict-key"
source = "github"

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569188, nanos_since_epoch = 217936000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1713463884, nanos_since_epoch = 866338000 }, "2a710731e0127ec3e21c6c3962a0254c98602e7428b33fc4fcaa67ab368ce1b1"]

View File

@ -3,14 +3,14 @@
[[requirements]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
source = "github"
[[packages]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569179, nanos_since_epoch = 408850000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@specialize-dict-key" = [{ secs_since_epoch = 1713463713, nanos_since_epoch = 938757000 }, "4a03ebbbc134cedfe1bf03b59d5ed476f4dd97a769dc259552a9086e786bb108"]

View File

@ -4,5 +4,5 @@ description = ""
[[dependencies]]
name = 'aiken-lang/stdlib'
version = 'main'
version = 'specialize-dict-key'
source = 'github'

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [

View File

@ -6,7 +6,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
},
"license": "Apache-2.0"
},

View File

@ -3,15 +3,15 @@
exit_codes=()
TESTS=()
for scenario in $(find . -maxdepth 1 -mindepth 1 -type d ! -name script_context); do
./run $scenario &
TESTS+=("$!")
done
for p in ${TESTS[@]}; do
wait $p
exit_codes+=("$?")
done
# for scenario in $(find . -maxdepth 1 -mindepth 1 -type d ! -name script_context); do
# ./run $scenario &
# TESTS+=("$!")
# done
#
# for p in ${TESTS[@]}; do
# wait $p
# exit_codes+=("$?")
# done
for interaction in $(find script_context/validators -type f); do

View File

@ -3,14 +3,14 @@
[[requirements]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
source = "github"
[[packages]]
name = "aiken-lang/stdlib"
version = "main"
version = "specialize-dict-key"
requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1711569203, nanos_since_epoch = 197638000 }, "b3c7a0d03fa7a9f454fccd45c69a09010858ec0b6c9a1f5c71ef2ebc36fc46bb"]
"aiken-lang/stdlib@specialize-dict-key" = [{ secs_since_epoch = 1713463977, nanos_since_epoch = 479564000 }, "4a03ebbbc134cedfe1bf03b59d5ed476f4dd97a769dc259552a9086e786bb108"]

View File

@ -4,5 +4,5 @@ description = ''
[[dependencies]]
name = 'aiken-lang/stdlib'
version = 'main'
version = 'specialize-dict-key'
source = 'github'

View File

@ -5,7 +5,7 @@
"plutusVersion": "v2",
"compiler": {
"name": "Aiken",
"version": "v1.0.26-alpha+075668b"
"version": "v1.0.26-alpha+4d36884"
}
},
"validators": [
@ -23,8 +23,8 @@
"$ref": "#/definitions/Void"
}
},
"compiledCode": "59035a0100003232323232323223232232253330073253330083330083375e601a601c601c601c601c601c601c601c601c601c601c601c60146ea8c004c028dd5001260126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff004a09444c94ccc024c94ccc028cdc3a400460166ea80044c94ccc02ccdd7980218069baa0014c0126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff0013009375a6006601a6ea8004528180798061baa001163001300b3754006264646464a66601a6464a6660240022c2a666024602a002264a66602066ebcc020c048dd50009ba6300448202a35ae41c54ccc040cdd7980498091baa30093012375400298122d8799f581c11111111111111111111111111111111111111111111111111111111ff00153330105333010300e30113754601060246ea8c024c048dd50008a5014a22a666020600a600660246ea80044cdd7980398091baa0014c0103d87a800014a029405280a503014001163758600260206ea8c01cc040dd500411809980a180a000899baf3004300f3754600c601e6ea801cdd31800a40a8294094ccc034c02c00452f5bded8c0264646600200297adef6c6022533301300113301433760981014000374c00697adef6c60132323232533301430093300a488100002133018337609801014000374c00e00a2a66602866e3d22100002133018337609801014000374c00e00626603066ec0dd48011ba6001330060060033756602a0066eb8c04c008c05c008c054004c8cc0040052f5bded8c044a66602400226602666ec13001014000375000697adef6c601323232325333013300833009488100002133017337609801014000375000e00a2a66602666e3d22100002133017337609801014000375000e00626602e66ec0dd48011ba800133006006003375a60280066eb8c048008c058008c050004dd7a60103d879800022533300c33720004002298103d87980001533300c3371e0040022980103d87a800014c103d87b80002300f30103010301000114a04601c601e00229408c034004526136563253330063004300700115333009300800114985858dd5000992999802180118028008a99980398030008a4c2c2c6ea8008dc3a4000ae6955ceaab9e5573eae815d0aba201",
"hash": "2c19b6a631b86636d34dec01ccc7929a4cd2ab0690f8b08cca44d735"
"compiledCode": "5903290100003232323232323223232232253330073253330083330083375e601a601c601c601c601c601c601c601c601c601c601c601c60146ea8c004c028dd5001260126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff004a09444c94ccc024c94ccc028cdc3a400460166ea80044c94ccc02ccdd7980218069baa0014c0126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff0013009375a6006601a6ea8004528180798061baa001163001300b375400626464a6660166464a6660200022c2a6660206026002264a66601c66ebcc018c040dd50009ba6300448202a35ae41c54ccc038cdd7980398081baa30073010375400298122d8799f581c11111111111111111111111111111111111111111111111111111111ff001533300e533300e300c300f3754600c60206ea8c01cc040dd50008a5014a22a66601c66ebcc00cc040dd5000a60103d879800013375e600a60206ea800530103d87a800014a029405280a5030120011637586002601c6ea8c014c038dd50031180898091809000899baf3002300d37546008601a6ea8014dd31800a40a8294094ccc02cc02400452f5bded8c0264646600200297adef6c6022533301100113301233760981014000374c00697adef6c60132323232533301233720910100002133016337609801014000374c00e00a2a66602466e3d22100002133016337609801014000374c00e00626602c66ec0dd48011ba600133006006003375660260066eb8c044008c054008c04c004c8cc0040052f5bded8c044a66602000226602266ec13001014000375000697adef6c60132323232533301133720910100002133015337609801014000375000e00a2a66602266e3d22100002133015337609801014000375000e00626602a66ec0dd48011ba800133006006003375a60240066eb8c040008c050008c0480048c03cc040c040c0400045281180718078008a502300d00114984d958c94ccc018c010c01c00454ccc024c0200045261616375400264a6660086004600a0022a66600e600c0022930b0b1baa002370e90002b9a5573aaae7955cfaba05742ae881",
"hash": "c1f48659f124f9dcd673c40fef80ecfa5b42a17949ff12fab7f1c269"
},
{
"title": "deploy.spend",
@ -40,8 +40,8 @@
"$ref": "#/definitions/Data"
}
},
"compiledCode": "59022b01000032323232323232222533300453330043375e00698103d879800013253330053323223253330093370e900018051baa00113232533300b3375e980106d8799f182aff0000213370e600a00890020a50533300a3370e900018059baa00113232533300f3012002149858dd6980800098061baa00116300e300b37540022c64646600200200644a66601c0022980103d87a80001323232533300e3371e00c6eb8c03c00c4cdd2a40006602400297ae0133005005002300f0023012002301000137286ecd30106d8799f182aff00300100122533300a0011480004cdc02400466004004601a0026eacc028c02cc02cc02cc02cc02cc02cc02cc02cc02cc02cc01cdd5180098039baa00213232533300a00116132533300b00116132533300932533300a3375e600a60186ea800530126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff0013375e601e60206020602060186ea800530122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff0014a0601c0062a66601266ebcc038c03cc02cdd5180298059baa0014c012ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff00153330093370e900218051baa3004300b37540022944585280a50300d001300d0013758600260106ea8c008c020dd500191805980618060008a502300a00114a029309b2b2b9a5573aaae7955cfaba05742ae881",
"hash": "6aa6a0ba9b1706f85f3d06f8a026db77191ed91a019afddb63a5db26"
"compiledCode": "59023e01000032323232323232222533300453330043375e00698103d879800013253330053323223253330093370e900018051baa00113232533300b3375e980106d8799f182aff0000213370e600a00890020a50533300a3370e900018059baa00113232533300f3012002149858dd6980800098061baa00116300e300b37540022c64646600200200644a66601c0022980103d87a8000132323232533300f3372200e0042a66601e66e3c01c0084cdd2a40006602600297ae014c0103d87a80001330060060033010003375c601c004602400460200026e50dd9a6106d8799f182aff00300100122533300a0011480004cdc02400466004004601a0026eacc028c02cc02cc02cc02cc02cc02cc02cc02cc02cc02cc01cdd5180098039baa00213232533300a00116132533300b00116132533300932533300a3375e600a60186ea800530126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff0013375e601e60206020602060186ea800530122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff0014a0601c0062a66601266ebcc038c03cc02cdd5180298059baa0014c012ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff00153330093370e900218051baa3004300b37540022944585280a50300d001300d0013758600260106ea8c008c020dd500191805980618060008a502300a00114a029309b2b2b9a5573aaae7955cfaba05742ae881",
"hash": "a77ca3bb8551334cbed20bafe31b3a2ac2d1862d065b7994864ebc5b"
},
{
"title": "mint.mint",
@ -51,8 +51,8 @@
"$ref": "#/definitions/Data"
}
},
"compiledCode": "5902b4010000323232323232322253330033232323232533233009323232533300f3012002132533300d3005300e3754002266e3c008dd7180918079baa001163008300e37540142c6eb8c040004cc004004cc010c00cdd5980298061baa3007300c37540109110022533300e00114bd70099807980618080009980100118088008a999191980599912999806980298071baa002132533300e3005300f37540022c266e1cdd6980998081baa001483c850c8cc004004cc88c94ccc044c020c048dd50008a5eb7bdb1804dd5980b18099baa001323300100100322533301500114c0103d87a8000132323253330153371e00c6eb8c05800c4c02ccc064dd3000a5eb804cc014014008dd5980b001180c801180b80098039bab3009301037540046eb8c04cc040dd50019129998090008a6103d87a8000132323253330123371e91103666f6f00375c6026006260106602c6ea00052f5c026600a00a0046eb4c04c008c058008c05000458c01cc034dd5004980418069baa009132323232533300f3007301037540022a66601e66ebc038c050c044dd50008980318019bab300230113754601860226ea80345280b1991191980080080191299980a8008a6103d87a8000132323253330153375e00c602c006260166603200297ae01330050050023016002301900230170013756600260206ea8c02cc040dd5006180518081baa00c2301330143014301430143014301430143014301400130010012253330100011480004cdc0240046600400460260026e952000370e90010a50370e90000a5023300200148810022323300100100322533300d00114bd6f7b630099191919299980719b8f0070021003133012337606ea4008dd3000998030030019bab300f003375c601a0046022004601e0024601660186018601860180024601460160024601200229309b2b2b9a5573aaae7955cfaba05742ae89",
"hash": "148b7dd21a30a5176713f946d88d0a3617a9d10705473319f6e3c04a"
"compiledCode": "590303010000323232323232322253330033232323232533233009323232533300f3012002132533300d3005300e3754002266e3c008dd7180918079baa001163008300e37540142c6eb8c040004cc004004cc010c00cdd5980298061baa3007300c37540109110022533300e00114bd70099807980618080009980100118088008a999191980599912999806980298071baa002132533300e3005300f37540022c266e1cdd6980998081baa001483c850c8cc004004cc88c94ccc044c020c048dd50008a5eb7bdb1804dd5980b18099baa001323300100100322533301500114c0103d87a800013232323253330163372200e0042a66602c66e3c01c0084c030cc068dd3000a5eb80530103d87a80001330060060033756602e0066eb8c054008c064008c05c004c01cdd5980498081baa002375c602660206ea800c894ccc0480045300103d87a800013232323253330133372291103666f6f00002153330133371e910103666f6f000021300933017375000297ae014c0103d87a8000133006006003375a60280066eb8c048008c058008c05000458c01cc034dd5004980418069baa009132323232533300f3007301037540022a66601e66ebc038c044c8cdd8180a800980a980b0009bac3014301137540022600c60046eacc010c044dd5180618089baa00d14a02c64660020026eacc010c044dd5180618089baa00d22533301300114c103d87a80001323253330123375e6026004601c60286ea80404c020cc058dd39980b18098011980b180a00125eb812f5c0266008008002602e004602a002600200244a66602200229000099b8048008cc008008c0500048c044c048c048c048c048c048c048c048c048c048004dd2a40006e1d200214a06e1d200014a046600400291010022323300100100322533300d00114bd6f7b630099191919299980719b910070021533300e3371e00e0042006200a26602466ec0dd48011ba6001330060060033756601e0066eb8c034008c044008c03c0048c02cc030c030c030c0300048c028c02c0048c024004526136565734aae7555cf2ab9f5740ae855d101",
"hash": "44f78e74dc636752b67e08bd512dccb429539645707ad3a898e94113"
},
{
"title": "withdrawals.spend",
@ -68,8 +68,8 @@
"$ref": "#/definitions/Void"
}
},
"compiledCode": "5902010100003232323232323223223225333006323232533300932533300a3370e900118059baa0011613370e6eb4c03cc030dd5000a40a8660026eacc008c02cdd5180198059baa0044c0126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff001533300932533300a3370e900118059baa0011613370e6eb4c03cc030dd5000a4038660026eacc008c02cdd5180198059baa0044c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff0013375e6e9cc8cc004004dd5980198061baa3004300c375400a44a66601c002297ae013300f300c3010001330020023011001374e6601a98126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff003300d4c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004bd700a5014a044646600200200644a66601e002298103d87a80001323232533300f3375e00c6020006266e95200033013375000297ae0133005005002375a6020004602600460220024601a601c601c601c601c601c601c0024601800229309b2b19299980299b8748000c01800454ccc020c01c0045261616375400264a66600666e1d2000300400115333006300500114985858dd5000ab9a5573aaae7955cfaba05742ae89",
"hash": "4d223be4711a6154da0c1e9ff7f158a6716d4e8eacde3e3922f3fae9"
"compiledCode": "5902310100003232323232323223223225333006323232533300932533300a3370e900118059baa0011613370e6eb4c030c8cdd81808000980818088009bac300f300c3754002902a198009bab3002300b3754600660166ea80108cdd79805800a6126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff001533300932533300a3370e900118059baa0011613370e6eb4c030c8cdd81808000980818088009bac300f300c3754002900e198009bab3002300b3754600660166ea80108cdd79805800a60126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff0013375e6e9cc8cc004004dd5980198061baa3004300c375400a44a66601c002297ae013300f300c3010001330020023011001374e6601a98126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff003300d4c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004bd700a5014a044646600200200644a66601e002298103d87a800013232533300e300500213374a9000198091ba733012300f0023301230100024bd7025eb804cc010010004c04c008c0440048c034c038c038c038c038c038c0380048c030004526136563253330053370e900018030008a99980418038008a4c2c2c6ea8004c94ccc00ccdc3a400060080022a66600c600a0022930b0b1baa0015734aae7555cf2ab9f5740ae855d11",
"hash": "0ce02b31bca5fbbbb9e4e1f050781b2272590945dc6e1094dc3d2bde"
}
],
"definitions": {

View File

@ -1,4 +1,5 @@
use aiken/dict
use aiken/list
use aiken/transaction.{Mint, ScriptContext}
use aiken/transaction/value
@ -36,6 +37,7 @@ fn assert_mint(purpose, transaction) {
}
fn assert_redeemers(ctx, my_redeemer) {
expect Some(redeemer) = dict.get(ctx.transaction.redeemers, ctx.purpose)
my_redeemer == redeemer && dict.size(ctx.transaction.redeemers) == 1
expect Some(Pair(_, redeemer)) =
list.find(ctx.transaction.redeemers, fn(kv) { kv.1st == ctx.purpose })
my_redeemer == redeemer && list.length(ctx.transaction.redeemers) == 1
}

View File

@ -1,4 +1,4 @@
use aiken/dict
use aiken/list
use aiken/transaction.{ScriptContext}
use aiken/transaction/credential.{
Inline, ScriptCredential, VerificationKeyCredential,
@ -21,15 +21,17 @@ validator {
)
and {
when dict.get(ctx.transaction.withdrawals, alice) is {
when
list.find(ctx.transaction.withdrawals, fn(kv) { kv.1st == alice })
is {
None -> fail @"alice's withdrawal not found"
Some(value) -> value == 42
Some(value) -> value.2nd == 42
},
when dict.get(ctx.transaction.withdrawals, bob) is {
when list.find(ctx.transaction.withdrawals, fn(kv) { kv.1st == bob }) is {
None -> fail @"bob's withdrawal not found"
Some(value) -> value == 14
Some(value) -> value.2nd == 14
},
dict.keys(ctx.transaction.withdrawals) == [alice, bob],
list.map(ctx.transaction.withdrawals, fn(kv) { kv.1st }) == [alice, bob],
}
}
}