(load "../common")

(defvarl words '#"the quick")

(defvarl lz0 (lazy-str words))

(test (lazy-str-get-trailing-list (copy lz0) 0) #"the quick")
(test (lazy-str-get-trailing-list (copy lz0) 1) #"he quick")
(test (lazy-str-get-trailing-list (copy lz0) 2) #"e quick")
(test (lazy-str-get-trailing-list (copy lz0) 3) ("" . #"quick"))
(test (lazy-str-get-trailing-list (copy lz0) 4) #"quick")
(test (lazy-str-get-trailing-list (copy lz0) 5) #"uick")
(test (lazy-str-get-trailing-list (copy lz0) 6) #"ick")
(test (lazy-str-get-trailing-list (copy lz0) 7) #"ck")
(test (lazy-str-get-trailing-list (copy lz0) 8) #"k")
(test (lazy-str-get-trailing-list (copy lz0) 9) (""))
(test (lazy-str-get-trailing-list (copy lz0) 10) ())
(test (lazy-str-get-trailing-list (copy lz0) 11) ())

(defvarl lz1 (lazy-str words ":"))

(test (lazy-str-get-trailing-list (copy lz1) 0) #"the quick")
(test (lazy-str-get-trailing-list (copy lz1) 1) #"he quick")
(test (lazy-str-get-trailing-list (copy lz1) 2) #"e quick")
(test (lazy-str-get-trailing-list (copy lz1) 3) ("" . #"quick"))
(test (lazy-str-get-trailing-list (copy lz1) 4) #"quick")
(test (lazy-str-get-trailing-list (copy lz1) 5) #"uick")
(test (lazy-str-get-trailing-list (copy lz1) 6) #"ick")
(test (lazy-str-get-trailing-list (copy lz1) 7) #"ck")
(test (lazy-str-get-trailing-list (copy lz1) 8) #"k")
(test (lazy-str-get-trailing-list (copy lz1) 9) (""))
(test (lazy-str-get-trailing-list (copy lz1) 10) ())
(test (lazy-str-get-trailing-list (copy lz1) 11) ())

(test [(copy lz1) 0..0] "")
(test [(copy lz1) 0..1] "t")
(test [(copy lz1) 0..2] "th")
(test [(copy lz1) 0..3] "the")
(test [(copy lz1) 0..4] "the:")
(test [(copy lz1) 0..5] "the:q")
(test [(copy lz1) 0..6] "the:qu")
(test [(copy lz1) 0..7] "the:qui")
(test [(copy lz1) 0..8] "the:quic")
(test [(copy lz1) 0..9] "the:quick")
(test [(copy lz1) 0..10] "the:quick:")
(test [(copy lz1) 0..11] "the:quick:")

(defvarl lz2 (lazy-str '#"the quick brown fox" ":" 2))

(test (lazy-str-get-trailing-list (copy lz2) 0) #"the quick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 1) #"he quick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 2) #"e quick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 3) ("" . #"quick brown fox"))
(test (lazy-str-get-trailing-list (copy lz2) 4) #"quick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 5) #"uick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 6) #"ick brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 7) #"ck brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 8) #"k brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 9) ("" . #"brown fox"))
(test (lazy-str-get-trailing-list (copy lz2) 10) #"brown fox")
(test (lazy-str-get-trailing-list (copy lz2) 11) #"brown fox")

(test [(copy lz2) 0..0] "")
(test [(copy lz2) 0..1] "t")
(test [(copy lz2) 0..2] "th")
(test [(copy lz2) 0..3] "the")
(test [(copy lz2) 0..4] "the:")
(test [(copy lz2) 0..5] "the:q")
(test [(copy lz2) 0..6] "the:qu")
(test [(copy lz2) 0..7] "the:qui")
(test [(copy lz2) 0..8] "the:quic")
(test [(copy lz2) 0..9] "the:quick")
(test [(copy lz2) 0..10] "the:quick:")
(test [(copy lz2) 0..11] "the:quick:")

(defvarl lz3 (lazy-str words ""))

(test (lazy-str-get-trailing-list (copy lz3) 0) #"t h e quick")
(test (lazy-str-get-trailing-list (copy lz3) 1) #"h e quick")
(test (lazy-str-get-trailing-list (copy lz3) 2) #"e quick")
(test (lazy-str-get-trailing-list (copy lz3) 3) #"q u i c k")
(test (lazy-str-get-trailing-list (copy lz3) 4) #"u i c k")
(test (lazy-str-get-trailing-list (copy lz3) 5) #"i c k")
(test (lazy-str-get-trailing-list (copy lz3) 6) #"c k")
(test (lazy-str-get-trailing-list (copy lz3) 7) #"k")
(test (lazy-str-get-trailing-list (copy lz3) 8) ())
(test (lazy-str-get-trailing-list (copy lz3) 9) ())

(test [(copy lz3) 0..0] "")
(test [(copy lz3) 0..1] "t")
(test [(copy lz3) 0..2] "th")
(test [(copy lz3) 0..3] "the")
(test [(copy lz3) 0..4] "theq")
(test [(copy lz3) 0..5] "thequ")
(test [(copy lz3) 0..6] "thequi")
(test [(copy lz3) 0..7] "thequic")
(test [(copy lz3) 0..8] "thequick")
(test [(copy lz3) 0..9] "thequick")