Menu

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

Download this file

165 lines (135 with data), 4.2 kB

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

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.