diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/compile/tsortdev.nim | 81 | ||||
-rwxr-xr-x | tests/run/tsortdev.nim | 59 | ||||
-rw-r--r-- | tests/testdata/string | 1 |
3 files changed, 59 insertions, 82 deletions
diff --git a/tests/compile/tsortdev.nim b/tests/compile/tsortdev.nim deleted file mode 100755 index 1b7705d81..000000000 --- a/tests/compile/tsortdev.nim +++ /dev/null @@ -1,81 +0,0 @@ -discard """ - disabled: false -""" - -import math, algorithm - -proc sorted[T](a: openArray[T], order: TSortOrder): bool = - result = true - for i in 0 .. < a.high: - if cmp(a[i], a[i+1]) * order > 0: - echo "Out of order: ", a[i], " ", a[i+1] - result = false - -proc bubbleSort[T](a: var openArray[T], - cmp: proc (x, y: T): int, - order = TSortOrder.Ascending) = - while true: - var sorted = true - for i in 0 .. a.len-2: - if cmp(a[i], a[i+1]) * order > 0: - swap(a[i], a[i+1]) - sorted = false - if sorted: break - -when isMainModule: - proc main() = - const order = Ascending - var data: seq[string] = @[] - - var L = random(59) - for i in 0..2: - #echo "loop: ", i - #newSeq(data, L) - setLen(data, L) - for j in 0 .. L-1: - data[j] = $(math.random(90) - 10) - assert getRefcount(data[j]) == 1 - {.watchpoint: data.} - var copy = data - for j in 0 .. L-1: - assert getRefcount(copy[j]) == 1 - assert(cast[pointer](copy[j]) != cast[pointer](data[j])) - - bubblesort(data, system.cmp, order) - if not sorted(data, order): - quit "bubblesort failed" - - sort(copy, cmp, order) - for j in 0 .. L-1: - let rc = getRefcount(data[j]) - if rc != 1: - echo "RC IST ", rc, " j: ", j - assert getRefcount(data[j]) == 1 - when false: - if copy.len != data.len: - quit "lengths differ!" - for i in 0 .. copy.high: - if copy[i] != data[i]: - quit "algorithms differ!" - when false: - for i in 0..10_000: - var data: seq[int] - var L = random(59) - newSeq(data, L) - for j in 0 .. L-1: - data[j] = (math.random(90) - 10) - var copy = data - sort(data, cmp[int], order) - if not sorted(data, order): - quit "sort for seq[int] failed" - bubblesort(copy, system.cmp[int], order) - if copy.len != data.len: - quit "lengths differ!" - for i in 0 .. copy.high: - if copy[i] != data[i]: - quit "algorithms differ!" - - main() - -echo "done" - diff --git a/tests/run/tsortdev.nim b/tests/run/tsortdev.nim new file mode 100755 index 000000000..d7d42d22c --- /dev/null +++ b/tests/run/tsortdev.nim @@ -0,0 +1,59 @@ +discard """ + output: "done" +""" + +import algorithm, strutils + +proc cmpPlatforms(a, b: string): int = + if a == b: return 0 + var dashes = a.split('-') + var dashes2 = b.split('-') + if dashes[0] == dashes2[0]: + if dashes[1] == dashes2[1]: return system.cmp(a,b) + case dashes[1] + of "x86": + return 1 + of "x86_64": + if dashes2[1] == "x86": return -1 + else: return 1 + of "ppc64": + if dashes2[1] == "x86" or dashes2[1] == "x86_64": return -1 + else: return 1 + else: + return system.cmp(dashes[1], dashes2[1]) + else: + case dashes[0] + of "linux": + return 1 + of "windows": + if dashes2[0] == "linux": return -1 + else: return 1 + of "macosx": + if dashes2[0] == "linux" or dashes2[0] == "windows": return -1 + else: return 1 + else: + if dashes2[0] == "linux" or dashes2[0] == "windows" or + dashes2[0] == "macosx": return -1 + else: + return system.cmp(a, b) + +proc sorted[T](a: openArray[T]): bool = + result = true + for i in 0 .. < a.high: + if cmpPlatforms(a[i], a[i+1]) > 0: + echo "Out of order: ", a[i], " ", a[i+1] + result = false + +proc main() = + var testData = @["netbsd-x86_64", "windows-x86", "linux-x86_64", "linux-x86", + "linux-ppc64", "macosx-x86-1058", "macosx-x86-1068"] + + sort(testData, cmpPlatforms) + + doAssert sorted(testData) + +for i in 0..1_000: + main() + +echo "done" + diff --git a/tests/testdata/string b/tests/testdata/string deleted file mode 100644 index 41bfe81b8..000000000 --- a/tests/testdata/string +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \ No newline at end of file |