tclcompiler Code
Brought to you by:
aotto1968
#§ #§ CompPerf - tcl_list.perf #§ #§ (C) IPN - Ingenieurbuero fuer Praezisionsnumerik #§ #§ Dipl.-Ing. Andreas Otto #§ Ulmenstrasse 3 #§ D-34289 Zierenberg #§ mailto:aotto@t-online.de #§ #§ Alle Rechte vorbehalten #§ package require PerfLib ## ## ----------------------------------------------------- ## the test-procs ## proc list-1.1 {l1} { string length $l1 string length $l1 llength $l1 llength $l1 } proc list-1.2 {lst} { llength $lst llength $lst } proc list-1.3 {s} { string length $s } proc list-2.1 {s t} { lsearch -exact $s $t } # The -sorted and -integer flags do not exist in versions of Tcl <= 8.3.1, # so if we [catch {lsearch -sorted}], we stub out the -sorted, et al, procs # with compatible (but less efficient) functions if { [catch {lsearch -sorted [list a b c] b}] } { proc list-2.2 {s t} { lsearch -exact $s $t } proc list-2.3 {s t} { lsearch -exact $s $t } proc list-2.4 {s t} { lsearch -exact $s $t } } else { proc list-2.2 {s t} { lsearch -sorted $s $t } proc list-2.3 {s t} { lsearch -exact -integer $s $t } proc list-2.4 {s t} { lsearch -sorted -integer $s $t } } proc list-2.5 {s} { lsort $s } proc list-2.5.1 {s} { lsort -integer $s } proc list-2.6 {s i} { # remove lreplace $s $i $i } proc list-2.7 {s i r} { # replace lreplace $s $i $i $r } proc list-2.8 {s i} { # retrieve lindex $s $i } proc list-2.9 {s i w} { # insert linsert $s $i $w } proc list-2.10 {s i j} { lrange $s $i $j } proc list-2.11 {s w} { lappend $s $w } proc list-2.11b {w} { lappend s $w } proc list-2.12 {l j} { join $l $j } proc makeLists {{size 500}} { global Sobj Lobj LSobj set Sobj "" set Lobj [list] set LSobj [list] for {set i 0} {$i < $size} {incr i} { append Sobj "$i " lappend Lobj $i lappend LSobj $i } string length $LSobj } makeLists 300 ## ## ----------------------------------------------------- ## make the test's ## set NUM [ ::PerfLib::Num 1000 ] set TOTAL [ time { ::PerfLib::Register list-1.1 "STR/LIST length, obj shimmer" ::PerfLib::Run list-1.1 [time {list-1.1 $LSobj} $NUM] ::PerfLib::Register list-1.2 "LIST length, pure list" ::PerfLib::Run list-1.2 [time {list-1.2 $Lobj} $NUM] ::PerfLib::Register list-1.3 "STR length of a LIST" ::PerfLib::Run list-1.3 [time {list-1.3 $LSobj} $NUM] # List searches (-exact versus -sorted) ::PerfLib::Register list-2.1a "LIST exact search, first item" ::PerfLib::Run list-2.1a [time {list-2.1 $Lobj 1} $NUM] ::PerfLib::Register list-2.1b "LIST exact search, middle item" ::PerfLib::Run list-2.1b [time {list-2.1 $Lobj 100} $NUM] ::PerfLib::Register list-2.1c "LIST exact search, last item" ::PerfLib::Run list-2.1c [time {list-2.1 $Lobj 199} $NUM] ::PerfLib::Register list-2.1d "LIST exact search, non-item" ::PerfLib::Run list-2.1d [time {list-2.1 $Lobj 500} $NUM] ::PerfLib::Register list-2.2a "LIST sorted search, first item" ::PerfLib::Run list-2.2a [time {list-2.2 $Lobj 1} $NUM] ::PerfLib::Register list-2.2b "LIST sorted search, middle item" ::PerfLib::Run list-2.2b [time {list-2.2 $Lobj 100} $NUM] ::PerfLib::Register list-2.2c "LIST sorted search, last item" ::PerfLib::Run list-2.2c [time {list-2.2 $Lobj 199} $NUM] ::PerfLib::Register list-2.2d "LIST sorted search, non-item" ::PerfLib::Run list-2.2d [time {list-2.2 $Lobj 500} $NUM] # List searches (-integer) ::PerfLib::Register list-2.1 "LIST exact search, untyped item" ::PerfLib::Run list-2.1 [time {list-2.1 $Lobj 199} $NUM] ::PerfLib::Register list-2.3 "LIST exact search, typed item" ::PerfLib::Run list-2.3 [time {list-2.3 $Lobj 199} $NUM] ::PerfLib::Register list-2.4 "LIST sorted search, typed item" ::PerfLib::Run list-2.4 [time {list-2.4 $Lobj 199} $NUM] # Other list operations ::PerfLib::Register list-2.5 "LIST sort" ::PerfLib::Run list-2.5 [time {list-2.5 $Lobj} $NUM] ::PerfLib::Register list-2.5.1 "LIST typed sort" ::PerfLib::Run list-2.5.1 [time {list-2.5.1 $Lobj} $NUM] ::PerfLib::Register list-2.6a "LIST remove first element" ::PerfLib::Run list-2.6a [time {list-2.6 $Lobj 0} $NUM] ::PerfLib::Register list-2.6b "LIST remove middle element" ::PerfLib::Run list-2.6b [time {list-2.6 $Lobj 100} $NUM] ::PerfLib::Register list-2.6c "LIST remove last element" ::PerfLib::Run list-2.6c [time {list-2.6 $Lobj 199} $NUM] ::PerfLib::Register list-2.7a "LIST replace first element" ::PerfLib::Run list-2.7a [time {list-2.7 $Lobj 0 10} $NUM] ::PerfLib::Register list-2.7b "LIST replace middle element" ::PerfLib::Run list-2.7b [time {list-2.7 $Lobj 100 10} $NUM] ::PerfLib::Register list-2.7c "LIST replace last element" ::PerfLib::Run list-2.7c [time {list-2.7 $Lobj 199 10} $NUM] ::PerfLib::Register list-2.6 "LIST remove in mixed list" ::PerfLib::Run list-2.6 [time {list-2.6 $LSobj 100} $NUM] ::PerfLib::Register list-2.7 "LIST replace in mixed list" ::PerfLib::Run list-2.7 [time {list-2.7 $LSobj 100 10} $NUM] ::PerfLib::Register list-2.8a "LIST index first element" ::PerfLib::Run list-2.8a [time {list-2.8 $Lobj 0} $NUM] ::PerfLib::Register list-2.8b "LIST index middle element" ::PerfLib::Run list-2.8b [time {list-2.8 $Lobj 100} $NUM] ::PerfLib::Register list-2.8c "LIST index last element" ::PerfLib::Run list-2.8c [time {list-2.8 $Lobj 199} $NUM] ::PerfLib::Register list-2.9a "LIST insert an item at start" ::PerfLib::Run list-2.9a [time {list-2.9 $Lobj 0 10} $NUM] ::PerfLib::Register list-2.9b "LIST insert an item at middle" ::PerfLib::Run list-2.9b [time {list-2.9 $Lobj 100 10} $NUM] ::PerfLib::Register list-2.9c "LIST insert an item at \"end\"" ::PerfLib::Run list-2.9c [time {list-2.9 $Lobj end 10} $NUM] ::PerfLib::Register list-2.10a "LIST small, early range" ::PerfLib::Run list-2.10a [time {list-2.10 $Lobj 0 10} $NUM] ::PerfLib::Register list-2.10b "LIST small, late range" ::PerfLib::Run list-2.10b [time {list-2.10 $Lobj 180 190} $NUM] ::PerfLib::Register list-2.10c "LIST large, early range" ::PerfLib::Run list-2.10c [time {list-2.10 $Lobj 0 150} $NUM] ::PerfLib::Register list-2.10d "LIST large, late range" ::PerfLib::Run list-2.10d [time {list-2.10 $Lobj 50 199} $NUM] ::PerfLib::Register list-2.11a "LIST append to list" ::PerfLib::Run list-2.11a [time {list-2.11 $Lobj 10} $NUM] ::PerfLib::Register list-2.11b "LIST append to list static var" ::PerfLib::Run list-2.11b [time {list-2.11b 10} $NUM] ::PerfLib::Register list-2.12 "LIST join list" ::PerfLib::Run list-2.12 [time {list-2.12 $Lobj ","} $NUM] } 1 ] ## ## ----------------------------------------------------- ## cleanup ## ::PerfLib::Exit