Menu

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

Download this file

132 lines (102 with data), 3.6 kB

#§
#§  CompPerf - tcl_read.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
##

# Read a file using gets
proc read-gets {filename {trans {}}} {
    set fp [open $filename r]
    if {[string compare $trans {}] && ([info tclversion] > 8.1)} {
    fconfigure $fp -translation $trans
    }
    while {[gets $fp line] != -1} {}
    close $fp
}

# Read a file using read only
proc read-read {filename {trans {}}} {
    set fp [open $filename r]
    if {[string compare $trans {}] && ([info tclversion] > 8.1)} {
    fconfigure $fp -translation $trans
    }
    read $fp
    close $fp
}

# Read a file using read and [file size]
proc read-read-size {filename {trans {}}} {
    set fp [open $filename r]
    if {[string compare $trans {}] && ([info tclversion] > 8.1)} {
    fconfigure $fp -translation $trans
    }
    read $fp [file size $filename]
    close $fp
}

proc makeFiles {largeFile smallFile} {
    # 60 chars
    set line "012345678901234567890123456789012345678901234567890123456789"

    set largeFid [open $largeFile w]
    # 60 * 10000 = 595K
    for {set i 0} {$i < 10000} {incr i} {
    puts $largeFid $line
    }
    close $largeFid

    set smallFid [open $smallFile w]
    # 60 * 50 = <3K
    for {set i 0} {$i < 50} {incr i} {
    puts $smallFid $line
    }
    close $smallFid
}

set largeFile TMP.lrg
set smallFile TMP.sml
makeFiles $largeFile $smallFile
set large "[expr {[file size $largeFile]/1024}]K"
set small "[file size $smallFile]b"

##
## -----------------------------------------------------
## make the test's
##

set NUM     [ ::PerfLib::Num 30 ]

set TOTAL   [ time {

    ::PerfLib::Register read-getsA "READ $large, gets"
    ::PerfLib::Run      read-getsA [time {read-gets $largeFile} $NUM]

    ::PerfLib::Register read-readA "READ $large, read"
    ::PerfLib::Run      read-readA [time {read-read $largeFile} $NUM]

    ::PerfLib::Register read-read-sizeA "READ $large, read & size"
    ::PerfLib::Run      read-read-sizeA [time {read-read-size $largeFile} $NUM]

    ::PerfLib::Register read-getsB "READ $small, gets"
    ::PerfLib::Run      read-getsB [time {read-gets $smallFile} $NUM]

    ::PerfLib::Register read-readB "READ $small, read"
    ::PerfLib::Run      read-readB [time {read-read $smallFile} $NUM]

    ::PerfLib::Register read-read-sizeB "READ $small, read & size"
    ::PerfLib::Run      read-read-sizeB [time {read-read-size $smallFile} $NUM]

    ::PerfLib::Register read-getsC "BREAD $large, gets"
    ::PerfLib::Run      read-getsC [time {read-gets $largeFile binary} $NUM]

    ::PerfLib::Register read-readC "BREAD $large, read"
    ::PerfLib::Run      read-readC [time {read-read $largeFile binary} $NUM]

    ::PerfLib::Register read-read-sizeC "BREAD $large, read & size"
    ::PerfLib::Run      read-read-sizeC [time {read-read-size $largeFile binary} $NUM]

    ::PerfLib::Register read-getsD "BREAD $small, gets"
    ::PerfLib::Run      read-getsD [time {read-gets $smallFile binary} $NUM]

    ::PerfLib::Register read-readD "BREAD $small, read"
    ::PerfLib::Run      read-readD [time {read-read $smallFile binary} $NUM]

    ::PerfLib::Register read-read-sizeD "BREAD $small, read & size"
    ::PerfLib::Run      read-read-sizeD [time {read-read-size $smallFile binary} $NUM]

} 1 ]

##
## -----------------------------------------------------
## cleanup
##

::PerfLib::Exit

file delete -force -- $largeFile $smallFile

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.