1discard """
2  exitcode: 0
3  output: ""
4"""
5import sets
6import tables
7import deques
8import lists
9import critbits
10
11# Tests for tuples
12doAssert $(1, 2, 3) == "(1, 2, 3)"
13doAssert $("1", "2", "3") == """("1", "2", "3")"""
14doAssert $('1', '2', '3') == """('1', '2', '3')"""
15
16# Tests for seqs
17doAssert $(@[1, 2, 3]) == "@[1, 2, 3]"
18doAssert $(@["1", "2", "3"]) == """@["1", "2", "3"]"""
19doAssert $(@['1', '2', '3']) == """@['1', '2', '3']"""
20
21# Tests for sets
22doAssert $(toHashSet([1])) == "{1}"
23doAssert $(toHashSet(["1"])) == """{"1"}"""
24doAssert $(toHashSet(['1'])) == """{'1'}"""
25doAssert $(toOrderedSet([1, 2, 3])) == "{1, 2, 3}"
26doAssert $(toOrderedSet(["1", "2", "3"])) == """{"1", "2", "3"}"""
27doAssert $(toOrderedSet(['1', '2', '3'])) == """{'1', '2', '3'}"""
28
29# Tests for tables
30when defined(nimIntHash1):
31  doAssert $({1: "1", 2: "2"}.toTable) == """{1: "1", 2: "2"}"""
32else:
33  doAssert $({1: "1", 2: "2"}.toTable) == """{2: "2", 1: "1"}"""
34doAssert $({"1": 1, "2": 2}.toTable) == """{"1": 1, "2": 2}"""
35
36# Tests for deques
37block:
38  var d = initDeque[int]()
39  d.addLast(1)
40  doAssert $d == "[1]"
41block:
42  var d = initDeque[string]()
43  d.addLast("1")
44  doAssert $d == """["1"]"""
45block:
46  var d = initDeque[char]()
47  d.addLast('1')
48  doAssert $d == "['1']"
49
50# Tests for lists
51block:
52  var l = initDoublyLinkedList[int]()
53  l.append(1)
54  l.append(2)
55  l.append(3)
56  doAssert $l == "[1, 2, 3]"
57block:
58  var l = initDoublyLinkedList[string]()
59  l.append("1")
60  l.append("2")
61  l.append("3")
62  doAssert $l == """["1", "2", "3"]"""
63block:
64  var l = initDoublyLinkedList[char]()
65  l.append('1')
66  l.append('2')
67  l.append('3')
68  doAssert $l == """['1', '2', '3']"""
69
70# Tests for critbits
71block:
72  var t: CritBitTree[int]
73  t["a"] = 1
74  doAssert $t == """{"a": 1}"""
75block:
76  var t: CritBitTree[string]
77  t["a"] = "1"
78  doAssert $t == """{"a": "1"}"""
79block:
80  var t: CritBitTree[char]
81  t["a"] = '1'
82  doAssert $t == """{"a": '1'}"""
83
84
85# Test escaping behavior
86block:
87  var s = ""
88  s.addQuoted('\0')
89  s.addQuoted('\31')
90  s.addQuoted('\127')
91  doAssert s == "'\\x00''\\x1F''\\x7F'"
92block:
93  var s = ""
94  s.addQuoted('\\')
95  s.addQuoted('\'')
96  s.addQuoted('\"')
97  doAssert s == """'\\''\'''\"'"""
98block:
99  var s = ""
100  s.addQuoted("å")
101  s.addQuoted("ä")
102  s.addQuoted("ö")
103  s.addEscapedChar('\xFF')
104  doAssert s == """"å""ä""ö"\xFF"""
105
106# Test customized element representation
107type CustomString = object
108
109proc addQuoted(s: var string, x: CustomString) =
110  s.add("<CustomString>")
111
112block:
113  let s = @[CustomString()]
114  doAssert $s == "@[<CustomString>]"
115
116