diff options
-rw-r--r-- | lib/pure/ropes.nim | 2 | ||||
-rw-r--r-- | tests/stdlib/tropes.nim | 66 |
2 files changed, 67 insertions, 1 deletions
diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index 41d6211b4..0797bbe06 100644 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -204,8 +204,8 @@ proc `[]`*(r: Rope, i: int): char {.rtl, extern: "nroCharAt".} = if x.left.length > j: x = x.left else: + dec(j, x.left.length) x = x.right - dec(j, x.len) iterator leaves*(r: Rope): string = ## iterates over any leaf string in the rope `r`. diff --git a/tests/stdlib/tropes.nim b/tests/stdlib/tropes.nim new file mode 100644 index 000000000..9678e26c3 --- /dev/null +++ b/tests/stdlib/tropes.nim @@ -0,0 +1,66 @@ +import ropes + + +block: + let r: Rope = nil + doAssert r[0] == '\0' + +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] + + doAssert r[66] == '\0' + +block: + let r = rope("Hello, Nim-Lang") + + let s = $r + for i in 0 ..< r.len: + doAssert r[i] == s[i] + + 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") + + let s = $r + for i in 0 ..< r.len: + doAssert r[i] == s[i] + + doAssert r[66] == '\0' + +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] + + doAssert r[66] == '\0' + +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[66] == '\0' |