Add new intgration test scenario 029

```
  Error:
    × Main thread panicked.
    ├─▶ at crates/lang/src/uplc.rs:2395:56
    ╰─▶ called `Result::unwrap()` on an `Err` value: FreeUnique(Name { text: "test_insert", unique:
        Unique(1) })
  ```
This commit is contained in:
KtorZ 2022-12-20 04:21:28 +01:00
parent daa3fa5d33
commit 58c123a930
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
2 changed files with 71 additions and 0 deletions

View File

@ -0,0 +1,2 @@
name = "acceptance_test_029"
version = "0.0.0"

View File

@ -0,0 +1,69 @@
pub opaque type AssocList<key, value> {
inner: List<#(key, value)>,
}
pub fn new() -> AssocList<key, value> {
AssocList { inner: [] }
}
pub fn from_list(xs: List<#(key, value)>) -> AssocList<key, value> {
AssocList { inner: do_from_list(xs) }
}
fn do_from_list(xs: List<#(key, value)>) -> List<#(key, value)> {
when xs is {
[] -> []
[#(k, v), ..rest] -> do_insert(do_from_list(rest), k, v)
}
}
pub fn insert(
in m: AssocList<key, value>,
key k: key,
value v: value,
) -> AssocList<key, value> {
AssocList { inner: do_insert(m.inner, k, v) }
}
fn do_insert(
elems: List<#(key, value)>,
k: key,
v: value,
) -> List<#(key, value)> {
when elems is {
[] -> [#(k, v)]
[#(k2, v2), ..rest] ->
if k == k2 {
[#(k, v), ..rest]
} else {
[#(k2, v2), ..do_insert(rest, k, v)]
}
}
}
pub fn union(
left left: AssocList<key, value>,
right right: AssocList<key, value>,
) -> AssocList<key, value> {
AssocList { inner: do_union(left.inner, right.inner) }
}
fn do_union(
left: List<#(key, value)>,
right: List<#(key, value)>,
) -> List<#(key, value)> {
when left is {
[] -> right
[#(k, v), ..rest] -> do_union(rest, do_insert(right, k, v))
}
}
fn fixture_1() {
new()
|> insert("foo", 42)
|> insert("bar", 14)
}
test union_1() {
union(fixture_1(), new()) == fixture_1()
}