# 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]