blob: 131e527cfac91b93ac8c83a6acde95b6a51963a8 [file] [log] [blame]
# Basic tests of unification
#
# Terminals
#
unify:
- _
- _
want:
_
---
unify:
- _
- test
want:
test
---
unify:
- test
- t?est
want:
test
---
unify:
- 1
- 1
want:
1
---
unify:
- test
- foo
want:
_|_
#
# Tuple
#
---
unify:
- [a, b]
- [a, b]
want:
[a, b]
---
unify:
- [a, _]
- [_, b]
want:
[a, b]
---
unify:
- ["ab?c", "de?f"]
- [ac, def]
want:
[ac, def]
#
# Repeats
#
---
unify:
- !repeat [a]
- [_]
want:
[a]
---
unify:
- !repeat [a]
- [_, _]
want:
[a, a]
---
unify:
- !repeat [a]
- [b]
want:
_|_
---
unify:
- !repeat [xy*]
- [x, xy, xyy]
want:
[x, xy, xyy]
---
unify:
- !repeat [xy*]
- !repeat ["xz?y*"]
- [x, xy, xyy]
want:
[x, xy, xyy]
---
unify:
- !repeat [!sum [a, b]]
- [a, b, a]
all:
- [a, b, a]
---
unify:
- !repeat [!sum [a, b]]
- !repeat [!sum [b, c]]
- [b, b, b]
all:
- [b, b, b]
---
unify:
- !repeat [!sum [a, b]]
- !repeat [!sum [b, c]]
- [a]
all: []
#
# Def
#
---
unify:
- {a: a, b: b}
- {a: a, b: b}
want:
{a: a, b: b}
---
unify:
- {a: a}
- {b: b}
want:
{a: a, b: b}
#
# Sum
#
---
unify:
- !sum [1, 2]
- !sum [2, 3]
all:
- 2
---
unify:
- !sum [{label: a, value: abc}, {label: b, value: def}]
- !sum [{value: "ab?c", extra: d}, {value: "def?", extra: g}]
all:
- {extra: d, label: a, value: abc}
- {extra: g, label: b, value: def}
---
# A sum of repeats must deal with different dynamically-created variables in
# each branch.
unify:
- !sum [!repeat [a], !repeat [b]]
- [a, a, a]
all:
- [a, a, a]
---
unify:
- !sum [!repeat [a], !repeat [b]]
- [a, a, b]
all: []
---
# Exercise sumEnvs with more than one result
unify:
- !sum
- [a|b, c|d]
- [e, g]
- [!sum [a, b, e, f], !sum [c, d, g, h]]
all:
- [a, c]
- [a, d]
- [b, c]
- [b, d]
- [e, g]