mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 03:32:32 +00:00
181 lines
3.0 KiB
Nim
181 lines
3.0 KiB
Nim
# bug #4462
|
|
import macros
|
|
import os
|
|
import strutils
|
|
|
|
block:
|
|
proc foo(t: typedesc) {.compileTime.} =
|
|
assert sameType(getType(t), getType(int))
|
|
|
|
static:
|
|
foo(int)
|
|
|
|
# #4412
|
|
block:
|
|
proc default[T](t: typedesc[T]): T {.inline.} = discard
|
|
|
|
static:
|
|
var x = default(type(0))
|
|
|
|
# #6379
|
|
import algorithm
|
|
|
|
static:
|
|
var numArray = [1, 2, 3, 4, -1]
|
|
numArray.sort(cmp)
|
|
assert numArray == [-1, 1, 2, 3, 4]
|
|
|
|
var str = "cba"
|
|
str.sort(cmp)
|
|
assert str == "abc"
|
|
|
|
# #6086
|
|
import math, sequtils, sugar
|
|
|
|
block:
|
|
proc f: int =
|
|
toSeq(10..<10_000).filter(
|
|
a => a == ($a).map(
|
|
d => (d.ord-'0'.ord).int^4
|
|
).sum
|
|
).sum
|
|
|
|
var a = f()
|
|
const b = f()
|
|
|
|
assert a == b
|
|
|
|
block:
|
|
proc f(): seq[char] =
|
|
result = "hello".map(proc(x: char): char = x)
|
|
|
|
var runTime = f()
|
|
const compTime = f()
|
|
assert runTime == compTime
|
|
|
|
# #6083
|
|
block:
|
|
proc abc(): seq[int] =
|
|
result = @[0]
|
|
result.setLen(2)
|
|
var tmp: int
|
|
|
|
for i in 0 ..< 2:
|
|
inc tmp
|
|
result[i] = tmp
|
|
|
|
const fact1000 = abc()
|
|
assert fact1000 == @[1, 2]
|
|
|
|
# Tests for VM ops
|
|
block:
|
|
static:
|
|
# for joint test, the project path is different, so I disabled it:
|
|
when false:
|
|
assert "vm" in getProjectPath()
|
|
|
|
let b = getEnv("UNSETENVVAR")
|
|
assert b == ""
|
|
assert existsEnv("UNSERENVVAR") == false
|
|
putEnv("UNSETENVVAR", "VALUE")
|
|
assert getEnv("UNSETENVVAR") == "VALUE"
|
|
assert existsEnv("UNSETENVVAR") == true
|
|
|
|
assert fileExists("MISSINGFILE") == false
|
|
assert dirExists("MISSINGDIR") == false
|
|
|
|
# #7210
|
|
block:
|
|
static:
|
|
proc f(size: int): int =
|
|
var some = newStringOfCap(size)
|
|
result = size
|
|
doAssert f(4) == 4
|
|
|
|
# #6689
|
|
block:
|
|
static:
|
|
proc foo(): int = 0
|
|
var f: proc(): int
|
|
doAssert f.isNil
|
|
f = foo
|
|
doAssert(not f.isNil)
|
|
|
|
block:
|
|
static:
|
|
var x: ref ref int
|
|
new(x)
|
|
doAssert(not x.isNil)
|
|
|
|
# #7871
|
|
static:
|
|
type Obj = object
|
|
field: int
|
|
var s = newSeq[Obj](1)
|
|
var o = Obj()
|
|
s[0] = o
|
|
o.field = 2
|
|
doAssert s[0].field == 0
|
|
|
|
# #8125
|
|
static:
|
|
let def_iter_var = ident("it")
|
|
|
|
# #8142
|
|
static:
|
|
type Obj = object
|
|
names: string
|
|
|
|
proc pushName(o: var Obj) =
|
|
var s = ""
|
|
s.add("FOOBAR")
|
|
o.names.add(s)
|
|
|
|
var o = Obj()
|
|
o.names = ""
|
|
o.pushName()
|
|
o.pushName()
|
|
doAssert o.names == "FOOBARFOOBAR"
|
|
|
|
# #8154
|
|
import parseutils
|
|
|
|
static:
|
|
type Obj = object
|
|
i: int
|
|
|
|
proc foo(): Obj =
|
|
discard parseInt("1", result.i, 0)
|
|
|
|
static:
|
|
doAssert foo().i == 1
|
|
|
|
# #10333
|
|
block:
|
|
const
|
|
encoding: auto = [
|
|
["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
|
|
["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"],
|
|
["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"],
|
|
["", "M", "MM", "MMM", "--", "-", "--", "---", "----", "--"],
|
|
]
|
|
doAssert encoding.len == 4
|
|
|
|
# #10886
|
|
|
|
proc tor(): bool =
|
|
result = true
|
|
result = false or result
|
|
|
|
proc tand(): bool =
|
|
result = false
|
|
result = true and result
|
|
|
|
const
|
|
ctor = tor()
|
|
ctand = not tand()
|
|
|
|
static:
|
|
doAssert ctor
|
|
doAssert ctand
|