Menu

[r3]: / lib / CompPerf.CVS / tcl_list.perf  Maximize  Restore  History

Download this file

260 lines (193 with data), 7.1 kB

#§
#§  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

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.