tests/tuples/ttuples_issues.nim: test on all backends + various improvements (#16907)
* improve tests/tuples/ttuples_issues.nim: test on all backends * address comments
This commit is contained in:
parent
fb80d2ff85
commit
7b9b76d840
3 changed files with 103 additions and 90 deletions
5
tests/js/readme.md
Normal file
5
tests/js/readme.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
## notes
|
||||||
|
Prefer moving tests to a non-js directory so that they get tested across all backends automatically.
|
||||||
|
Ideally, tests/js should be reserved to code that only makes sense in js.
|
||||||
|
|
||||||
|
Note also that tests for a js specific module (e.g.: `std/jsbigints`) belong to `tests/stdlib`, (e.g.: `tests/stdlib/tjsbigints.nim`)
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
block: # bug #16822
|
|
||||||
var scores: seq[(set[char], int)] = @{{'/'} : 10}
|
|
||||||
|
|
||||||
var x1: set[char]
|
|
||||||
for item in items(scores):
|
|
||||||
x1 = item[0]
|
|
||||||
|
|
||||||
doAssert x1 == {'/'}
|
|
||||||
|
|
||||||
var x2: set[char]
|
|
||||||
for (chars, value) in items(scores):
|
|
||||||
x2 = chars
|
|
||||||
|
|
||||||
doAssert x2 == {'/'}
|
|
||||||
|
|
||||||
block: # bug #14574
|
|
||||||
proc fn(): auto =
|
|
||||||
let a = @[("foo", (12, 13))]
|
|
||||||
for (k,v) in a:
|
|
||||||
return (k,v)
|
|
||||||
doAssert fn() == ("foo", (12, 13))
|
|
||||||
|
|
||||||
block: # bug #14574
|
|
||||||
iterator fn[T](a:T): lent T = yield a
|
|
||||||
let a = (10, (11,))
|
|
||||||
proc bar(): auto =
|
|
||||||
for (x,y) in fn(a):
|
|
||||||
return (x,y)
|
|
||||||
doAssert bar() == (10, (11,))
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''(a: 1)
|
targets: "c cpp js"
|
||||||
(a: 1)
|
|
||||||
(a: 1, b: 2)
|
|
||||||
'''
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# targets include `cpp` because in the past, there were several cpp-specific bugs with tuples.
|
||||||
|
|
||||||
import tables
|
import std/tables
|
||||||
|
|
||||||
|
template main() =
|
||||||
block t4479:
|
block: # bug #4479
|
||||||
type
|
type
|
||||||
MyTuple = tuple
|
MyTuple = tuple
|
||||||
num: int
|
num: int
|
||||||
|
|
@ -22,18 +20,17 @@ block t4479:
|
||||||
ints: @[],
|
ints: @[],
|
||||||
))
|
))
|
||||||
|
|
||||||
var bar = (
|
var bar = MyTuple (
|
||||||
num: 7,
|
num: 7,
|
||||||
strings: @[],
|
strings: @[],
|
||||||
ints: @[],
|
ints: @[],
|
||||||
).MyTuple
|
)
|
||||||
|
|
||||||
var fooUnnamed = MyTuple((7, @[], @[]))
|
var fooUnnamed = MyTuple((7, @[], @[]))
|
||||||
var n = 7
|
var n = 7
|
||||||
var fooSym = MyTuple((num: n, strings: @[], ints: @[]))
|
var fooSym = MyTuple((num: n, strings: @[], ints: @[]))
|
||||||
|
|
||||||
|
block: # bug #1910
|
||||||
block t1910:
|
|
||||||
var p = newOrderedTable[tuple[a:int], int]()
|
var p = newOrderedTable[tuple[a:int], int]()
|
||||||
var q = newOrderedTable[tuple[x:int], int]()
|
var q = newOrderedTable[tuple[x:int], int]()
|
||||||
for key in p.keys:
|
for key in p.keys:
|
||||||
|
|
@ -41,8 +38,7 @@ block t1910:
|
||||||
for key in q.keys:
|
for key in q.keys:
|
||||||
echo key.x
|
echo key.x
|
||||||
|
|
||||||
|
block: # bug #2121
|
||||||
block t2121:
|
|
||||||
type
|
type
|
||||||
Item[K,V] = tuple
|
Item[K,V] = tuple
|
||||||
key: K
|
key: K
|
||||||
|
|
@ -51,8 +47,7 @@ block t2121:
|
||||||
var q = newseq[Item[int,int]](1)
|
var q = newseq[Item[int,int]](1)
|
||||||
let (x,y) = q[0]
|
let (x,y) = q[0]
|
||||||
|
|
||||||
|
block: # bug #2369
|
||||||
block t2369:
|
|
||||||
type HashedElem[T] = tuple[num: int, storedVal: ref T]
|
type HashedElem[T] = tuple[num: int, storedVal: ref T]
|
||||||
|
|
||||||
proc append[T](tab: var seq[HashedElem[T]], n: int, val: ref T) =
|
proc append[T](tab: var seq[HashedElem[T]], n: int, val: ref T) =
|
||||||
|
|
@ -68,8 +63,7 @@ block t2369:
|
||||||
x[] = 77
|
x[] = 77
|
||||||
g.append(44, x)
|
g.append(44, x)
|
||||||
|
|
||||||
|
block: # bug #1986
|
||||||
block t1986:
|
|
||||||
proc test(): int64 =
|
proc test(): int64 =
|
||||||
return 0xdeadbeef.int64
|
return 0xdeadbeef.int64
|
||||||
|
|
||||||
|
|
@ -78,7 +72,50 @@ block t1986:
|
||||||
(var1: test(), var2: 192'u32)
|
(var1: test(), var2: 192'u32)
|
||||||
]
|
]
|
||||||
|
|
||||||
# bug #14911
|
block: # bug #14911
|
||||||
echo (a: 1) # works
|
doAssert $(a: 1) == "(a: 1)" # works
|
||||||
echo (`a`: 1) # works
|
doAssert $(`a`: 1) == "(a: 1)" # works
|
||||||
echo (`a`: 1, `b`: 2) # Error: named expression expected
|
doAssert $(`a`: 1, `b`: 2) == "(a: 1, b: 2)" # was: Error: named expression expected
|
||||||
|
|
||||||
|
block: # bug #16822
|
||||||
|
var scores: seq[(set[char], int)] = @{{'/'} : 10}
|
||||||
|
|
||||||
|
var x1: set[char]
|
||||||
|
for item in items(scores):
|
||||||
|
x1 = item[0]
|
||||||
|
|
||||||
|
doAssert x1 == {'/'}
|
||||||
|
|
||||||
|
var x2: set[char]
|
||||||
|
for (chars, value) in items(scores):
|
||||||
|
x2 = chars
|
||||||
|
|
||||||
|
doAssert x2 == {'/'}
|
||||||
|
|
||||||
|
block: # bug #14574
|
||||||
|
proc fn(): auto =
|
||||||
|
let a = @[("foo", (12, 13))]
|
||||||
|
for (k,v) in a:
|
||||||
|
return (k,v)
|
||||||
|
doAssert fn() == ("foo", (12, 13))
|
||||||
|
|
||||||
|
block: # bug #14574
|
||||||
|
iterator fn[T](a:T): lent T = yield a
|
||||||
|
let a = (10, (11,))
|
||||||
|
proc bar(): auto =
|
||||||
|
for (x,y) in fn(a):
|
||||||
|
return (x,y)
|
||||||
|
doAssert bar() == (10, (11,))
|
||||||
|
|
||||||
|
proc mainProc() =
|
||||||
|
# other tests should be in `main`
|
||||||
|
block:
|
||||||
|
type A = tuple[x: int, y: int]
|
||||||
|
doAssert (x: 1, y: 2).A == A (x: 1, y: 2) # MCS => can't use a template
|
||||||
|
|
||||||
|
static:
|
||||||
|
main()
|
||||||
|
mainProc()
|
||||||
|
|
||||||
|
main()
|
||||||
|
mainProc()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue