tclcompiler Code
Brought to you by:
aotto1968
#§ #§ CompPerf - tcl_regexp.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 regexp-1.1 {} { ## - Inline regular expresion set string "abcdefghijklmnopqrstuvwxyz" regexp -inline {abc*jkl} "$string" } proc regexp-1.2 {} { ## - Braced regexp set string "abcdefghijklmnopqrstuvwxyz" regexp {abc*jkl} "$string" } proc regexp-2.1 {} { ## + Inline regular expresion set string "abcdefghijklmnopqrstuvwxyz" regexp -inline {abc.*jkl} "$string" } proc regexp-2.2 {} { ## + Braced regexp set string "abcdefghijklmnopqrstuvwxyz" regexp {abc.*jkl} "$string" DUMMY } proc regexp-3.1 {} { ## + Inline regular expresion with subMatchVar set string "abcdefghijklmnopqrstuvwxyz" set DUMMY [ regexp -inline {abc(.*)jkl(.*)uvw} "$string" ] } proc regexp-3.2 {} { ## + Braced regexp with subMatchVar set string "abcdefghijklmnopqrstuvwxyz" regexp {abc(.*)jkl(.*)uvw} "$string" DUMMY D1 D2 } # Literal regular expresion proc regexp-4.1 {string} { regexp "^abc(.*)jkl(.*)" $string } # Variable based regexp proc regexp-4.2 {string exp} { regexp $exp $string } if { [catch {regexp -all "abc" "abc"}] } { proc regexp-5.1 {string exp} { set len [string len $string] set ind 0 set count 0 while { $ind < $len } { if { [regexp -indices $exp \ [string range $string $ind end] res] } { set start [lindex $res 0] set end [lindex $res 1] if { $end < $start } { set end $start } set ind [expr {$end + 1 + $ind}] incr count } } set count } proc regexp-5.2 {string exp} { set len [string len $string] set ind 0 set result {} while { $ind < $len } { if { [regexp -indices $exp \ [string range $string $ind end] res] } { set start [lindex $res 0] set end [lindex $res 1] if { $end < $start } { set end $start } lappend result [string range $string \ [expr {$start + $ind}] [expr {$end + $ind}]] set ind [expr {$end + 1 + $ind}] } } set result } } else { proc regexp-5.1 {string exp} { regexp -all $exp $string } proc regexp-5.2 {string exp} { regexp -all -inline $exp $string } } ## ## ----------------------------------------------------- ## make the test's ## set NUM [ ::PerfLib::Num 1000 ] set TOTAL [ time { ::PerfLib::Register regexp-1.1 "- Inline regular expresion" ::PerfLib::Run regexp-1.1 [time {regexp-1.1} $NUM] ::PerfLib::Register regexp-1.2 "- Braced regexp" ::PerfLib::Run regexp-1.2 [time {regexp-1.2} $NUM] ::PerfLib::Register regexp-2.1 "+ Inline regular expresion" ::PerfLib::Run regexp-2.1 [time {regexp-2.1} $NUM] ::PerfLib::Register regexp-2.2 "+ Braced regexp" ::PerfLib::Run regexp-2.2 [time {regexp-2.2} $NUM] ::PerfLib::Register regexp-3.1 "+ Inline regular expresion with subMatchVar" ::PerfLib::Run regexp-3.1 [time {regexp-3.1} $NUM] ::PerfLib::Register regexp-3.2 "+ Braced regexp with subMatchVar" ::PerfLib::Run regexp-3.2 [time {regexp-3.2} $NUM] set string "abcdefghijklmnopqrstuvwxyz" set exp "^abc(.*)jkl(.*)" ::PerfLib::Register regexp-4.1 "Literal regular expresion" ::PerfLib::Run regexp-4.1 [time {regexp-4.1 $string} $NUM] ::PerfLib::Register regexp-4.2 "Variable based regexp" ::PerfLib::Run regexp-4.2 [time {regexp-4.2 $string $exp} $NUM] ::PerfLib::Register regexp-5.1 "All" ::PerfLib::Run regexp-5.1 [time {regexp-5.1 "abcabcabcabcabcabc" "abc"} $NUM] ::PerfLib::Register regexp-5.2 "All + Inline" ::PerfLib::Run regexp-5.2 [time {regexp-5.2 "abcabcabcabcabcabc" "abc"} $NUM] } 1 ] ## ## ----------------------------------------------------- ## cleanup ## ::PerfLib::Exit