fix rope index (#16100)

* fix rope index

* add testcase

(cherry picked from commit ab2c082cb3)
This commit is contained in:
flywind
2020-11-23 18:27:09 +08:00
committed by narimiran
parent fbb58343d9
commit 74fa24ce45
2 changed files with 67 additions and 1 deletions

View File

@@ -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`.

66
tests/stdlib/tropes.nim Normal file
View File

@@ -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'