summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorgriffin <briang42@easystreet.net>2022-11-02 22:33:01 (GMT)
committergriffin <briang42@easystreet.net>2022-11-02 22:33:01 (GMT)
commit853e484a64f304ca86f7df17d8576aaf995bd457 (patch)
tree04fe0e7b991889785d04863e56e3b447ca6fffcd /tests
parent5a3d2ddfede6842bc089bd78d0c80fad82f911b0 (diff)
parente2e526bea8ef2256a75b29eba0f828467df9d4bd (diff)
downloadtcl-853e484a64f304ca86f7df17d8576aaf995bd457.zip
tcl-853e484a64f304ca86f7df17d8576aaf995bd457.tar.gz
tcl-853e484a64f304ca86f7df17d8576aaf995bd457.tar.bz2
TIP 636 for Tcl 9
Diffstat (limited to 'tests')
-rw-r--r--tests/abstractlist.test537
-rw-r--r--tests/lseq.test13
2 files changed, 547 insertions, 3 deletions
diff --git a/tests/abstractlist.test b/tests/abstractlist.test
new file mode 100644
index 0000000..6c2312e
--- /dev/null
+++ b/tests/abstractlist.test
@@ -0,0 +1,537 @@
+# Exercise AbstractList API via the "lstring" command defined in tclTestABSList.c
+#
+# Copyright © 2022 Brian Griffin
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+if {"::tcltest" ni [namespace children]} {
+ package require tcltest 2.5
+ namespace import -force ::tcltest::*
+}
+
+testConstraint testevalex [llength [info commands testevalex]]
+
+set abstractlisttestvars [info var *]
+
+proc value-isa {var {expected ""}} {
+ upvar $var v
+ set t [lindex [tcl::unsupported::representation $v] 3]
+ if {$expected ne "" && $expected ne $t} {
+ set fail " expecting: $expected"
+ } else {
+ set fail ""
+ }
+ return "$var is a $t$fail"
+}
+
+proc value-cmp {vara varb} {
+ upvar $vara a
+ upvar $varb b
+ set ta [tcl::unsupported::representation $a]
+ set tb [tcl::unsupported::representation $b]
+ return [string compare $ta $tb]
+}
+
+set str "My name is Inigo Montoya. You killed my father. Prepare to die!"
+set str2 "Vizzini: HE DIDN'T FALL? INCONCEIVABLE. Inigo Montoya: You keep using that word. I do not think it means what you think it means."
+
+test abstractlist-1.0 {error cases} -body {
+ lstring
+} \
+ -returnCodes 1 \
+ -result {wrong # args: should be "lstring string"}
+
+test abstractlist-1.1 {error cases} -body {
+ lstring a b c
+} -returnCodes 1 \
+ -result {wrong # args: should be "lstring string"}
+
+test abstractlist-2.0 {no shimmer llength} {
+ set l [lstring $str]
+ set l-isa [value-isa l]
+ set len [llength $l]
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${len} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} 63 {l is a lstring}}
+
+test abstractlist-2.1 {no shimmer lindex} {
+ set l [lstring $str]
+ set l-isa [value-isa l]
+ set ele [lindex $l 22]
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${ele} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} y {l is a lstring}}
+
+test abstractlist-2.2 {no shimmer lreverse} {
+ set l [lstring $str]
+ set l-isa [value-isa l]
+ set r [lreverse $l]
+ set r-isa [value-isa r]
+ set l-isa2 [value-isa l]
+ list $r ${l-isa} ${r-isa} ${l-isa2}
+} {{! e i d { } o t { } e r a p e r P { } . r e h t a f { } y m { } d e l l i k { } u o Y { } . a y o t n o M { } o g i n I { } s i { } e m a n { } y M} {l is a lstring} {r is a lstring} {l is a lstring}}
+
+test abstractlist-2.3 {no shimmer lrange} {
+ set l [lstring $str]
+ set l-isa [value-isa l]
+ set il [lsearch -all [lstring $str] { }]
+ set l-isa2 [value-isa l]
+ lappend il [llength $l]
+ set start 0
+ set words [lmap i $il {
+ set w [join [lrange $l $start $i-1] {} ]
+ set start [expr {$i+1}]
+ set w
+ }]
+ set l-isa3 [value-isa l]
+ list ${l-isa} $il ${l-isa2} ${l-isa3} $words
+} {{l is a lstring} {2 7 10 16 25 29 36 39 47 55 58 63} {l is a lstring} {l is a lstring} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+test abstractlist-2.4 {no shimmer foreach} {
+ set l [lstring $str]
+ set l-isa [value-isa l]
+ set word {}
+ set words {}
+ foreach c $l {
+ if {$c eq { }} {
+ lappend words $word
+ set word {}
+ } else {
+ append word $c
+ }
+ }
+ if {$word ne ""} {
+ lappend words $word
+ }
+ set l-isa2 [value-isa l]
+ list ${l-isa} ${l-isa2} $words
+} {{l is a lstring} {l is a lstring} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+#
+# The TBCE implements lreplace as a lrange + lappend operation, so, in this case, $m results is a list, not an lstring.
+#
+test abstractlist-2.5 {!no shimmer lreplace} {
+ set l [lstring $str2]
+ set l-isa [value-isa l]
+ set m [lreplace $l 18 23 { } f a i l ?]
+ set m-isa [value-isa m]
+ set l-isa1 [value-isa l]
+ list ${l-isa} $m ${m-isa} ${l-isa1}
+} {{l is a lstring} {V i z z i n i : { } H E { } D I D N ' T { } f a i l ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {m is a list} {l is a lstring}}
+
+test abstractlist-2.6 {no shimmer ledit} {
+ # "ledit m 9 8 S"
+ set l [lstring $str2]
+ set l-isa [value-isa l]
+ set e [ledit l 9 8 S]
+ set e-isa [value-isa e]
+ list ${l-isa} $e ${e-isa}
+} {{l is a lstring} {V i z z i n i : { } S H E { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {e is a lstring}}
+
+test abstractlist-2.7 {no shimmer linsert} {
+ # "ledit m 9 8 S"
+ set l [lstring $str2]
+ set l-isa [value-isa l]
+ set i [linsert $l 12 {*}[split "almost " {}]]
+ set i-isa [value-isa i]
+ set res [list ${l-isa} $i ${i-isa}]
+ set p [lpop i 23]
+ set p-isa [value-isa p]
+ set i-isa2 [value-isa i]
+ lappend res $p ${p-isa} $i ${i-isa2}
+} {{l is a lstring} {V i z z i n i : { } H E { } a l m o s t { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a lstring} ' {p is a pure} {V i z z i n i : { } H E { } a l m o s t { } D I D N T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a lstring}}
+
+test abstractlist-2.8 {shimmer lassign} {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lassign $l i n c]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {o n c e i v a b l e} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-2.9 {no shimmer lremove} {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lremove $l 0 1]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {c o n c e i v a b l e} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-2.10 {shimmer lreverse} {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lreverse $l]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {e l b a v i e c n o c n I} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-2.11 {shimmer lset} {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set m [lset l 2 k]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} {{I n k o n c e i v a b l e} {l is a lstring} {I n k o n c e i v a b l e} {m is a lstring} 0}
+
+# lrepeat
+test abstractlist-2.12 {shimmer lrepeat} {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set m [lrepeat 3 $l]
+ set m-isa [value-isa m]
+ set n [lindex $m 1]
+ list $l ${l-isa} $m ${m-isa} [value-isa n] [value-cmp l n]
+} {{I n c o n c e i v a b l e} {l is a lstring} {{I n c o n c e i v a b l e} {I n c o n c e i v a b l e} {I n c o n c e i v a b l e}} {m is a list} {n is a lstring} 0}
+
+test abstractlist-2.13 {no shimmer join llength==1} {
+ set l [lstring G]
+ set l-isa [value-isa l]
+ set j [join $l :]
+ set j-isa [value-isa j]
+ list ${l-isa} $l ${j-isa} $j
+} {{l is a lstring} G {j is a pure} G}
+
+test abstractlist-2.14 {error case lset multiple indicies} -body {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set m [lset l 2 0 1 k]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} -returnCodes 1 \
+ -result {Multiple indicies not supported by lstring.}
+
+# lsort
+
+test abstractlist-3.0 {no shimmer llength} {
+ set l [lstring -not SLICE $str]
+ set l-isa [value-isa l]
+ set len [llength $l]
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${len} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} 63 {l is a lstring}}
+
+test abstractlist-3.1 {no shimmer lindex} {
+ set l [lstring -not SLICE $str]
+ set l-isa [value-isa l]
+ set n 22
+ set ele [lindex $l $n] ;# exercise INST_LIST_INDEX
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${ele} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} y {l is a lstring}}
+
+test abstractlist-3.2 {no shimmer lreverse} {
+ set l [lstring -not SLICE $str]
+ set l-isa [value-isa l]
+ set r [lreverse $l]
+ set r-isa [value-isa r]
+ set l-isa2 [value-isa l]
+ list $r ${l-isa} ${r-isa} ${l-isa2}
+} {{! e i d { } o t { } e r a p e r P { } . r e h t a f { } y m { } d e l l i k { } u o Y { } . a y o t n o M { } o g i n I { } s i { } e m a n { } y M} {l is a lstring} {r is a lstring} {l is a lstring}}
+
+test abstractlist-3.3 {shimmer lrange} {
+ set l [lstring -not SLICE $str]
+ set l-isa [value-isa l]
+ set il [lsearch -all [lstring -not SLICE $str] { }]
+ set l-isa2 [value-isa l]
+ lappend il [llength $l]
+ set start 0
+ set words [lmap i $il {
+ set w [join [lrange $l $start $i-1] {} ]
+ set start [expr {$i+1}]
+ set w
+ }]
+ set l-isa3 [value-isa l]; # lrange defaults to list behavior
+ list ${l-isa} $il ${l-isa2} ${l-isa3} $words
+} {{l is a lstring} {2 7 10 16 25 29 36 39 47 55 58 63} {l is a lstring} {l is a list} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+test abstractlist-3.4 {no shimmer foreach} {
+ set l [lstring -not SLICE $str]
+ set l-isa [value-isa l]
+ set word {}
+ set words {}
+ foreach c $l {
+ if {$c eq { }} {
+ lappend words $word
+ set word {}
+ } else {
+ append word $c
+ }
+ }
+ if {$word ne ""} {
+ lappend words $word
+ }
+ set l-isa2 [value-isa l]
+ list ${l-isa} ${l-isa2} $words
+} {{l is a lstring} {l is a lstring} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+#
+# The TBCE implements lreplace as a lrange + lappend operation, so, in this case, $m results is a list, not an lstring.
+#
+test abstractlist-3.5 {!no shimmer lreplace} {
+ set l [lstring -not SLICE $str2]
+ set l-isa [value-isa l]
+ set m [lreplace $l 18 23 { } f a i l ?]
+ set m-isa [value-isa m]
+ set l-isa1 [value-isa l]
+ list ${l-isa} $m ${m-isa} ${l-isa1}
+} {{l is a lstring} {V i z z i n i : { } H E { } D I D N ' T { } f a i l ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {m is a list} {l is a list}}
+
+test abstractlist-3.6 {no shimmer ledit} {
+ # "ledit m 9 8 S"
+ set l [lstring -not SLICE $str2]
+ set l-isa [value-isa l]
+ set e [ledit l 9 8 S]
+ set e-isa [value-isa e]
+ list ${l-isa} $e ${e-isa}
+} {{l is a lstring} {V i z z i n i : { } S H E { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {e is a lstring}}
+
+test abstractlist-3.7 {no shimmer linsert} {
+ # "ledit m 9 8 S"
+ set res {}
+ set l [lstring -not SLICE $str2]
+ set l-isa [value-isa l]
+ set i [linsert $l 12 {*}[split "almost " {}]]
+ set i-isa [value-isa i]
+ set res [list ${l-isa} $i ${i-isa}]
+ set p [lpop i 23]
+ set p-isa [value-isa p]
+ set i-isa2 [value-isa i]
+ lappend res $p ${p-isa} $i ${i-isa2}
+} {{l is a lstring} {V i z z i n i : { } H E { } a l m o s t { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a lstring} ' {p is a pure} {V i z z i n i : { } H E { } a l m o s t { } D I D N T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a lstring}}
+
+test abstractlist-3.8 {shimmer lassign} {
+ set l [lstring -not SLICE Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lassign $l i n c] ;# must be using lrange internally
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {o n c e i v a b l e} {l is a list} {l2 is a list}}
+
+test abstractlist-3.9 {no shimmer lremove} {
+ set l [lstring -not SLICE Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lremove $l 0 1]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {c o n c e i v a b l e} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-3.10 {shimmer lreverse} {
+ set l [lstring -not SLICE Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lreverse $l]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {e l b a v i e c n o c n I} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-3.11 {shimmer lset} {
+ set l [lstring -not SLICE Inconceivable]
+ set l-isa [value-isa l]
+ set m [lset l 2 k]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} {{I n k o n c e i v a b l e} {l is a lstring} {I n k o n c e i v a b l e} {m is a lstring} 0}
+
+# lrepeat
+test abstractlist-3.12 {shimmer lrepeat} {
+ set l [lstring -not SLICE Inconceivable]
+ set l-isa [value-isa l]
+ set m [lrepeat 3 $l]
+ set m-isa [value-isa m]
+ set n [lindex $m 1]
+ list $l ${l-isa} $m ${m-isa} [value-isa n] [value-cmp l n]
+} {{I n c o n c e i v a b l e} {l is a lstring} {{I n c o n c e i v a b l e} {I n c o n c e i v a b l e} {I n c o n c e i v a b l e}} {m is a list} {n is a lstring} 0}
+
+# lsort
+foreach not {{} REVERSE SLICE SETELEMENT REPLACE GETELEMENTS} {
+
+ testConstraint [format "%sShimmer" [string totitle $not]] [expr {$not eq ""}]
+ set options [expr {$not ne "" ? "-not $not" : ""}]
+
+test abstractlist-$not-4.0 {no shimmer llength} {
+ set l [lstring {*}$options $str]
+ set l-isa [value-isa l]
+ set len [llength $l]
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${len} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} 63 {l is a lstring}}
+
+test abstractlist-$not-4.1 {no shimmer lindex} {
+ set l [lstring {*}$options $str]
+ set l-isa [value-isa l]
+ set ele [lindex $l 22]
+ set l-isa2 [value-isa l]
+ list $l ${l-isa} ${ele} ${l-isa2}
+} {{M y { } n a m e { } i s { } I n i g o { } M o n t o y a . { } Y o u { } k i l l e d { } m y { } f a t h e r . { } P r e p a r e { } t o { } d i e !} {l is a lstring} y {l is a lstring}}
+
+test abstractlist-$not-4.2 {lreverse} ReverseShimmer {
+ set l [lstring {*}$options $str]
+ set l-isa [value-isa l]
+ set r [lreverse $l]
+ set r-isa [value-isa r]
+ set l-isa2 [value-isa l]
+ list $r ${l-isa} ${r-isa} ${l-isa2}
+} {{! e i d { } o t { } e r a p e r P { } . r e h t a f { } y m { } d e l l i k { } u o Y { } . a y o t n o M { } o g i n I { } s i { } e m a n { } y M} {l is a lstring} {r is a lstring} {l is a lstring}}
+
+test abstractlist-$not-4.3 {no shimmer lrange} RangeShimmer {
+ set l [lstring {*}$options $str]
+ set l-isa [value-isa l]
+ set il [lsearch -all [lstring {*}$options $str] { }]
+ set l-isa2 [value-isa l]
+ lappend il [llength $l]
+ set start 0
+ set words [lmap i $il {
+ set w [join [lrange $l $start $i-1] {} ]
+ set start [expr {$i+1}]
+ set w
+ }]
+ set l-isa3 [value-isa l]
+ list ${l-isa} $il ${l-isa2} ${l-isa3} $words
+} {{l is a lstring} {2 7 10 16 25 29 36 39 47 55 58 63} {l is a lstring} {l is a lstring} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+test abstractlist-$not-4.4 {no shimmer foreach} {
+ set l [lstring {*}$options $str]
+ set l-isa [value-isa l]
+ set word {}
+ set words {}
+ foreach c $l {
+ if {$c eq { }} {
+ lappend words $word
+ set word {}
+ } else {
+ append word $c
+ }
+ }
+ if {$word ne ""} {
+ lappend words $word
+ }
+ set l-isa2 [value-isa l]
+ list ${l-isa} ${l-isa2} $words
+} {{l is a lstring} {l is a lstring} {My name is Inigo Montoya. You killed my father. Prepare to die!}}
+
+#
+# The TBCE implements lreplace as a lrange + lappend operation, so, in this case, $m results is a list, not an lstring.
+#
+test abstractlist-$not-4.5 {!no shimmer lreplace} RangeShimmer {
+ set l [lstring {*}$options $str2]
+ set l-isa [value-isa l]
+ set m [lreplace $l 18 23 { } f a i l ?]
+ set m-isa [value-isa m]
+ set l-isa1 [value-isa l]
+ list ${l-isa} $m ${m-isa} ${l-isa1}
+} {{l is a lstring} {V i z z i n i : { } H E { } D I D N ' T { } f a i l ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {m is a list} {l is a lstring}}
+
+test abstractlist-$not-4.6 {no shimmer ledit} {SetelementShimmer ReplaceShimmer} {
+ # "ledit m 9 8 S"
+ set l [lstring {*}$options $str2]
+ set l-isa [value-isa l]
+ set e [ledit l 9 8 S]
+ set e-isa [value-isa e]
+ list ${l-isa} $e ${e-isa}
+} {{l is a lstring} {V i z z i n i : { } S H E { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {e is a lstring}}
+
+test abstractlist-$not-4.7 {no shimmer linsert} ReplaceShimmer {
+ # "ledit m 9 8 S"
+ set l [lstring {*}$options $str2]
+ set l-isa [value-isa l]
+ set i [linsert $l 12 {*}[split "almost " {}]]
+ set i-isa [value-isa i]
+ set res [list ${l-isa} $i ${i-isa}]
+ set p [lpop i 23]
+ set p-isa [value-isa p]
+ set i-isa2 [value-isa i]
+ lappend res $p ${p-isa} $i ${i-isa2}
+} {{l is a lstring} {V i z z i n i : { } H E { } a l m o s t { } D I D N ' T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a lstring} ' {p is a pure} {V i z z i n i : { } H E { } a l m o s t { } D I D N T { } F A L L ? { } I N C O N C E I V A B L E . { } I n i g o { } M o n t o y a : { } Y o u { } k e e p { } u s i n g { } t h a t { } w o r d . { } I { } d o { } n o t { } t h i n k { } i t { } m e a n s { } w h a t { } y o u { } t h i n k { } i t { } m e a n s .} {i is a list}}
+
+# lassign probably uses lrange internally
+test abstractlist-$not-4.8 {shimmer lassign} RangeShimmer {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lassign $l i n c]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {o n c e i v a b l e} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-$not-4.9 {no shimmer lremove} ReplaceShimmer {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lremove $l 0 1]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {c o n c e i v a b l e} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-$not-4.10 {shimmer lreverse} ReverseShimmer {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set l2 [lreverse $l]
+ set l-isa2 [value-isa l]
+ set l2-isa [value-isa l2]
+ list $l ${l-isa} $l2 ${l-isa2} ${l2-isa}
+} {{I n c o n c e i v a b l e} {l is a lstring} {e l b a v i e c n o c n I} {l is a lstring} {l2 is a lstring}}
+
+test abstractlist-$not-4.11 {shimmer lset} SetelementShimmer {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set m [lset l 2 k]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} {{I n k o n c e i v a b l e} {l is a lstring} {I n k o n c e i v a b l e} {m is a lstring} 0}
+
+test abstractlist-$not-4.11x {lset not compiled} {SetelementShimmer testevalex} {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set m [testevalex {lset l 2 k}]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} {{I n k o n c e i v a b l e} {l is a lstring} {I n k o n c e i v a b l e} {m is a lstring} 0}
+
+test abstractlist-$not-4.11e {error case lset multiple indicies} \
+ -constraints {SetelementShimmer testevalex} -body {
+ set l [lstring Inconceivable]
+ set l-isa [value-isa l]
+ set m [testevalex {lset l 2 0 1 k}]
+ set m-isa [value-isa m]
+ list $l ${l-isa} $m ${m-isa} [value-cmp l m]
+} -returnCodes 1 \
+ -result {Multiple indicies not supported by lstring.}
+
+# lrepeat
+test abstractlist-$not-4.12 {shimmer lrepeat} {
+ set l [lstring {*}$options Inconceivable]
+ set l-isa [value-isa l]
+ set m [lrepeat 3 $l]
+ set m-isa [value-isa m]
+ set n [lindex $m 1]
+ list $l ${l-isa} $m ${m-isa} [value-isa n] [value-cmp l n]
+} {{I n c o n c e i v a b l e} {l is a lstring} {{I n c o n c e i v a b l e} {I n c o n c e i v a b l e} {I n c o n c e i v a b l e}} {m is a list} {n is a lstring} 0}
+
+# Disable constraint
+testConstraint [format "%sShimmer" [string totitle $not]] 1
+
+}
+
+# lsort
+
+# cleanup
+::tcltest::cleanupTests
+
+proc my_abstl_cleanup {vars} {
+ set nowvars [uplevel info vars]
+ foreach var $nowvars {
+ if {$var ni $vars} {
+ uplevel unset $var
+ lappend clean-list $var
+ }
+ }
+ return ${clean-list}
+}
+
+my_abstl_cleanup $abstractlisttestvars
diff --git a/tests/lseq.test b/tests/lseq.test
index 3f68da4..04069fc 100644
--- a/tests/lseq.test
+++ b/tests/lseq.test
@@ -537,9 +537,16 @@ test lseq-4.8 {error case lrange} -body {
test lseq-4.9 {error case lrange} -body {
set fred 7
set ginger 8
- lrange [lseq 1 5] $fred $ginger
-} -returnCodes 1 \
- -result {index 7 is out of bounds 0 to 4}
+ lrange [lseq 1 10] $fred $ginger
+} -result {8 9}
+
+test lseq-4.10 {lset shimmer} -body {
+ set l [lseq 15]
+ lappend res $l [lindex [tcl::unsupported::representation $l] 3]
+ lset l 3 25
+ lappend res $l [lindex [tcl::unsupported::representation $l] 3]
+} -result {{0 1 2 3 4 5 6 7 8 9 10 11 12 13 14} arithseries {0 1 2 25 4 5 6 7 8 9 10 11 12 13 14} list}
+
# Panic when using variable value?
test lseq-4.10 {panic using variable index} {