# SPDX-FileCopyrightText: ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense import std/unittest import preserves, syndicate from syndicate/protocols/dataspace import Observe type Observe = dataspace.Observe[Ref] import ./test_schema test "patterns": let observerPat = ?Observe(pattern: !Foo) ?? {0: grab()} check($observerPat == """ > <_> <_>]>]> <_>]>""") let value = @["alles", "in", "ordnung"] observer = toPreserve(Observe(pattern: inject(?Foo, { 0: ?value })), Ref) have = capture(observerPat, observer).toPreserve(Ref).unpackLiterals want = [value.toPreserve(Ref)].toPreserve(Ref) check(have == want) type Record {.preservesDictionary.} = object a, b, c: int test "dictionaries": let pat = ?Record echo pat var source = initDictionary(Ref) source["b".toSymbol(Ref)] = 2.toPreserve(Ref) source["c".toSymbol(Ref)] = 3.toPreserve(Ref) source["a".toSymbol(Ref)] = 1.toPreserve(Ref) let values = capture(pat, source) check $values == "@[1, 2, 3]"