summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorkonsumlamm <44230978+konsumlamm@users.noreply.github.com>2021-02-22 19:58:37 +0100
committerGitHub <noreply@github.com>2021-02-22 19:58:37 +0100
commita1f41137059fcb5b16e3c95b1e63c4a5ed08a408 (patch)
tree01e1a659a1d8a24d9b1f1b2c71f05e34665d60c2 /tests
parentd76d79336faef323744e9d22b99ec7a327b72cea (diff)
downloadNim-a1f41137059fcb5b16e3c95b1e63c4a5ed08a408.tar.gz
Improve the ropes module (#17145)
* Improve ropes module

Improve wording
Update runnableExamples
Add index bound check for `[]`
Minor format changes

* Update tests/stdlib/tropes.nim

Run on C & JS target
Test in VM
Add tests for `[]`
Diffstat (limited to 'tests')
-rw-r--r--tests/stdlib/tropes.nim137
1 files changed, 83 insertions, 54 deletions
diff --git a/tests/stdlib/tropes.nim b/tests/stdlib/tropes.nim
index 0c95d5c5f..5a9150a33 100644
--- a/tests/stdlib/tropes.nim
+++ b/tests/stdlib/tropes.nim
@@ -1,73 +1,102 @@
-import ropes
+discard """
+  targets: "c js"
+"""
 
+import std/ropes
 
-block:
-  let r: Rope = nil
-  doAssert r[0] == '\0'
+template main() =
+  block:
+    let r: Rope = nil
+    doAssert r[0] == '\0'
+    doAssert $r == ""
 
-block:
-  var
-    r1 = rope("Hello")
-    r2 = rope("Nim-Lang")
+  block:
+    var
+      r1 = rope("Hello, ")
+      r2 = rope("Nim-Lang")
 
-  let r = r1 & r2
-  let s = $r
-  for i in 0 ..< r.len:
-    doAssert r[i] == s[i]
+    let r = r1 & r2
+    let s = $r
+    doAssert s == "Hello, Nim-Lang"
+    for i in 0 ..< r.len:
+      doAssert r[i] == s[i]
 
-  doAssert r[66] == '\0'
+    doAssert r[66] == '\0'
 
-block:
-  let r = rope("Hello, Nim-Lang")
+  block:
+    let r = rope("Hello, Nim-Lang")
 
-  let s = $r
-  for i in 0 ..< r.len:
-    doAssert r[i] == s[i]
+    let s = $r
+    doAssert s == "Hello, Nim-Lang"
+    for i in 0 ..< r.len:
+      doAssert r[i] == s[i]
 
-  doAssert r[66] == '\0'
+    doAssert r[66] == '\0'
 
-block:
-  var r: Rope
-  r.add rope("Nim ")
-  r.add rope("is ")
-  r.add rope("a ")
-  r.add rope("great ")
-  r.add rope("language")
+  block:
+    var r: Rope
+    r.add rope("Nim ")
+    r.add rope("is ")
+    r.add rope("a ")
+    r.add rope("great ")
+    r.add rope("language")
 
-  let s = $r
-  for i in 0 ..< r.len:
-    doAssert r[i] == s[i]
+    let s = $r
+    doAssert s == "Nim is a great language"
+    for i in 0 ..< r.len:
+      doAssert r[i] == s[i]
 
-  doAssert r[66] == '\0'
+    doAssert r[66] == '\0'
 
-block:
-  var r: Rope
-  r.add rope("My Conquest")
-  r.add rope(" is ")
-  r.add rope("the Sea of Stars")
+  block:
+    var r: Rope
+    r.add rope("My Conquest")
+    r.add rope(" is ")
+    r.add rope("the Sea of Stars")
 
-  let s = $r
-  for i in 0 ..< r.len:
-    doAssert r[i] == s[i]
+    let s = $r
+    doAssert s == "My Conquest is the Sea of Stars"
+    for i in 0 ..< r.len:
+      doAssert r[i] == s[i]
 
-  doAssert r[66] == '\0'
+    doAssert r[66] == '\0'
 
-block:
-  var r: Rope
-  r.add rope("My Conquest")
-  r.add rope(" is ")
-  r.add rope("the Sea of Stars")
+  block:
+    var r: Rope
+    r.add rope("My Conquest")
+    r.add rope(" is ")
+    r.add rope("the Sea of Stars")
 
-  var i: int
-  for item in r:
-    doAssert r[i] == item
-    inc i
+    doAssert $r == "My Conquest is the Sea of Stars"
 
-  doAssert r[66] == '\0'
+    var i: int
+    for item in r:
+      doAssert r[i] == item
+      inc i
 
-block:
-  let r1 = "$1 $2 $3" % [rope("Nim"), rope("is"), rope("a great language")]
-  doAssert $r1 == "Nim is a great language"
+    doAssert r[66] == '\0'
 
-  let r2 = "$# $# $#" % [rope("Nim"), rope("is"), rope("a great language")]
-  doAssert $r2 == "Nim is a great language"
+  block:
+    let r1 = "$1 $2 $3" % [rope("Nim"), rope("is"), rope("a great language")]
+    doAssert $r1 == "Nim is a great language"
+
+    let r2 = "$# $# $#" % [rope("Nim"), rope("is"), rope("a great language")]
+    doAssert $r2 == "Nim is a great language"
+
+  block: # `[]`
+    let r1 = rope("Hello, Nim!")
+
+    doAssert r1[-2] == '\0'
+    doAssert r1[0] == 'H'
+    doAssert r1[7] == 'N'
+    doAssert r1[22] == '\0'
+
+    let r2 = rope("Hello") & rope(", Nim!")
+
+    doAssert r2[-2] == '\0'
+    doAssert r2[0] == 'H'
+    doAssert r2[7] == 'N'
+    doAssert r2[22] == '\0'
+
+static: main()
+main()