forked from google-research/dex-lang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathset-tests.dx
80 lines (56 loc) · 1.59 KB
/
set-tests.dx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import set
-- check order invariance.
:p (to_set ["Bob", "Alice", "Charlie"]) == (to_set ["Charlie", "Bob", "Alice"])
> True
-- check uniqueness.
:p (to_set ["Bob", "Alice", "Alice", "Charlie"]) == (to_set ["Charlie", "Charlie", "Bob", "Alice"])
> True
set1 = to_set ["Xeno", "Alice", "Bob"]
set2 = to_set ["Bob", "Xeno", "Charlie"]
:p set1 == set2
> False
:p set_union set1 set2
> (UnsafeAsSet 4 ["Alice", "Bob", "Charlie", "Xeno"])
:p set_intersect set1 set2
> (UnsafeAsSet 2 ["Bob", "Xeno"])
:p remove_duplicates_from_sorted ["Alice", "Alice", "Alice", "Bob", "Bob", "Charlie", "Charlie", "Charlie"]
> (AsList 3 ["Alice", "Bob", "Charlie"])
:p set1 == (set_union set1 set1)
> True
:p set1 == (set_intersect set1 set1)
> True
'#### Empty set tests
emptyset = to_set ([]::(Fin 0)=>String)
:p emptyset == emptyset
> True
:p emptyset == (set_union emptyset emptyset)
> True
:p emptyset == (set_intersect emptyset emptyset)
> True
:p set1 == (set_union set1 emptyset)
> True
:p emptyset == (set_intersect set1 emptyset)
> True
'### Set Index Set tests
names2 = to_set ["Bob", "Alice", "Charlie", "Alice"]
Person : Type = Element names2
:p size Person
> 3
-- Check that ordinal and unsafeFromOrdinal are inverses.
roundTrip = for i:Person.
i == (unsafe_from_ordinal (ordinal i))
:p all roundTrip
> True
-- Check that member and value are inverses.
roundTrip2 = for i:Person.
s = value i
ix = member s names2
i == from_just ix
:p all roundTrip2
> True
setix : Person = from_just $ member "Bob" names2
:p setix
> Element(1)
setix2 : Person = from_just $ member "Charlie" names2
:p setix2
> Element(2)