summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAndrey Sobolev <andrey.sobolev@xored.com>2015-09-25 14:05:33 +0600
committerAndrey Sobolev <andrey.sobolev@xored.com>2015-09-25 14:05:33 +0600
commit30362315a08f7e3a7e74a5c6fccca59f193e5333 (patch)
treeb96e63c5bc48b7168aa7df6fb3b2b112f819e641 /tests
parented103e8e382853a1fe7a377c2fc451c6b159f0b7 (diff)
parent308a0d0a553c8d44f321a1b6e4772c388bb79059 (diff)
downloadNim-30362315a08f7e3a7e74a5c6fccca59f193e5333.tar.gz
Merge remote-tracking branch 'nim-lang/devel' into emscripten-support
Diffstat (limited to 'tests')
-rw-r--r--tests/parallel/tparfind.nim28
-rw-r--r--tests/stdlib/tmemfiles1.nim13
-rw-r--r--tests/stdlib/tmemfiles2.nim38
-rw-r--r--tests/vm/tyaytypedesc.nim21
4 files changed, 100 insertions, 0 deletions
diff --git a/tests/parallel/tparfind.nim b/tests/parallel/tparfind.nim
new file mode 100644
index 000000000..9de5012f5
--- /dev/null
+++ b/tests/parallel/tparfind.nim
@@ -0,0 +1,28 @@
+discard """
+  output: "500"
+"""
+
+import threadpool, sequtils
+
+{.experimental.}
+
+proc linearFind(a: openArray[int]; x, offset: int): int =
+  for i, y in a:
+    if y == x: return i+offset
+  result = -1
+
+proc parFind(a: seq[int]; x: int): int =
+  var results: array[4, int]
+  parallel:
+    if a.len >= 4:
+      let chunk = a.len div 4
+      results[0] = spawn linearFind(a[0 ..< chunk], x, 0)
+      results[1] = spawn linearFind(a[chunk ..< chunk*2], x, chunk)
+      results[2] = spawn linearFind(a[chunk*2 ..< chunk*3], x, chunk*2)
+      results[3] = spawn linearFind(a[chunk*3 ..< a.len], x, chunk*3)
+  result = max(results)
+
+
+let data = toSeq(0..1000)
+echo parFind(data, 500)
+
diff --git a/tests/stdlib/tmemfiles1.nim b/tests/stdlib/tmemfiles1.nim
new file mode 100644
index 000000000..f7f39f5bc
--- /dev/null
+++ b/tests/stdlib/tmemfiles1.nim
@@ -0,0 +1,13 @@
+discard """
+  test that closing a closed file is ignored (no error raised)
+  file: "tmemfiles1.nim"
+"""
+import memfiles, os
+var
+  mm: MemFile
+  fn = "test.mmap"
+# Create a new file
+mm = memfiles.open(fn, mode = fmReadWrite, newFileSize = 20)
+mm.close()
+mm.close()
+if fileExists(fn): removeFile(fn)
diff --git a/tests/stdlib/tmemfiles2.nim b/tests/stdlib/tmemfiles2.nim
new file mode 100644
index 000000000..04ae8429f
--- /dev/null
+++ b/tests/stdlib/tmemfiles2.nim
@@ -0,0 +1,38 @@
+discard """
+  test creating/reading/writing/changing memfiles
+  file: "tmemfiles2.nim"
+  output: '''Full read size: 20
+Half read size: 10 Data: Hello'''
+"""
+import memfiles, os
+var
+  mm, mm_full, mm_half: MemFile
+  fn = "test.mmap"
+  p: pointer
+
+if fileExists(fn): removeFile(fn)
+
+# Create a new file, data all zeros
+mm = memfiles.open(fn, mode = fmReadWrite, newFileSize = 20)
+mm.close()
+
+# read, change
+mm_full = memfiles.open(fn, mode = fmWrite, mappedSize = -1)
+echo "Full read size: ",mm_full.size
+p = mm_full.mapMem(fmReadWrite, 20, 0)
+var p2 = cast[cstring](p)
+p2[0] = 'H'
+p2[1] = 'e'
+p2[2] = 'l'
+p2[3] = 'l'
+p2[4] = 'o'
+p2[5] = '\0'
+mm_full.unmapMem(p, 20)
+mm_full.close()
+
+# read half, and verify data change
+mm_half = memfiles.open(fn, mode = fmRead, mappedSize = 10)
+echo "Half read size: ",mm_half.size, " Data: ", cast[cstring](mm_half.mem)
+mm_half.close()
+
+if fileExists(fn): removeFile(fn)
diff --git a/tests/vm/tyaytypedesc.nim b/tests/vm/tyaytypedesc.nim
new file mode 100644
index 000000000..a3ad9b707
--- /dev/null
+++ b/tests/vm/tyaytypedesc.nim
@@ -0,0 +1,21 @@
+discard """
+  output: "ntWhitespace"
+"""
+
+# bug #3357
+
+type NodeType* = enum
+  ntWhitespace
+
+type TokenType* = enum
+  ttWhitespace
+
+proc enumTable*[A, B, C](a: openarray[tuple[key: A, val: B]], ret: typedesc[C]): C =
+  for item in a:
+    result[item.key] = item.val
+
+const tokenTypeToNodeType = {
+  ttWhitespace: ntWhitespace,
+}.enumTable(array[ttWhitespace..ttWhitespace, NodeType])
+
+echo tokenTypeToNodeType[ttWhitespace]