diff options
-rw-r--r-- | lib.c | 12 | ||||
-rw-r--r-- | tests/010/range.tl | 2 | ||||
-rw-r--r-- | tests/012/seq.tl | 12 |
3 files changed, 24 insertions, 2 deletions
@@ -1060,7 +1060,17 @@ void seq_iter_init_with_info(val self, seq_iter_t *it, seq_info_t si) /* fallthrough */ default: unsup_obj(self, it->inf.obj); - } else { + } else switch (type(rf)) { + case LIT: + case STR: + case LSTR: + it->ui.vn = copy_str(rf); + it->ul.vbound = rt; + it->ops = &si_range_str_ops; + if (eql(length_str(rf), length_str(rt))) + break; + unsup_obj(self, it->inf.obj); + default: seq_iter_init_with_info(self, it, seq_info(nil)); break; } diff --git a/tests/010/range.tl b/tests/010/range.tl index 4cc9ee95..c116cf87 100644 --- a/tests/010/range.tl +++ b/tests/010/range.tl @@ -67,7 +67,7 @@ (range* 0 1.25 0.5) (0 0.5 1.0)) (mtest - (range "A" "A") nil + (range "A" "A") ("A") (range "A" "A" 0) :error (range "A" "A" -2) :error) diff --git a/tests/012/seq.tl b/tests/012/seq.tl index 86980e57..b1063513 100644 --- a/tests/012/seq.tl +++ b/tests/012/seq.tl @@ -1636,3 +1636,15 @@ (length "Z".."A") 26 (length "AAA".."ZZZ") 17576 (length "ZZZ".."AAA") 17576) + +(mtest + (list-seq "A".."A") ("A") + (list-seq "A".."B") ("A" "B") + (list-seq "B".."A") ("B" "A") + (list-seq "AA".."AA") ("AA") + (list-seq "AA".."AB") ("AA" "AB") + (list-seq "AB".."AA") ("AB" "AA") + (list-seq "A".."D") ("A" "B" "C" "D") + (list-seq "D".."A") ("D" "C" "B" "A") + (list-seq "AA".."CC") ("AA" "AB" "AC" "BA" "BB" "BC" "CA" "CB" "CC") + (list-seq "CC".."AA") ("CC" "CB" "CA" "BC" "BB" "BA" "AC" "AB" "AA")) |