Posted to tcl by miguel at Fri Oct 26 12:15:24 GMT 2007view raw
- # Iterate over lists with for
- proc loops-for-list {list} {
- set len [llength $list]
- for {set i 0} {$i < $len} {incr i} {
- set var [lindex $list $i]
- }
- }
- # Iterate over lists with foreach
- proc loops-foreach-list {list} {
- foreach elem $list {
- set var $elem
- }
- }
- # Looping with for
- proc loops-foo-num {size} {
- for {set i 0} {$i < $size} {incr i} {
- set bogus abc
- }
- }
- # Looping with while
- proc loops-while-num {size} {
- set i 0
- while {$i < $size} {
- set bogus abc
- incr i
- }
- }
- # Looping with while
- proc loops-while-1 {size} {
- set i 0
- while {1} {
- if {[incr i] > $size} { break }
- }
- }
- # iterate over chars in string using [string index]
- proc loops-for-string {s} {
- set len [string length $s]
- for {set i 0} {$i < $len} {incr i} {
- set var [string index $s $i]
- }
- }
- # iterate over chars in string using [foreach] and [split]
- proc loops-foreach-string {s} {
- foreach c [split $s {}] {
- set var $c
- }
- }
- proc go N {
- set list {}
- set string ""
- set size 1000
- for {set i 0} {$i < $size} {incr i} {
- lappend list $i
- append string "0"
- }
- for {set i 0} {$i < $N} {incr i} {
- bench -desc "LOOP for, iterate list" \
- -body {loops-for-list $list}
- bench -desc "LOOP foreach, iterate list" \
- -body {loops-foreach-list $list}
- bench -desc "LOOP for (to $size)" \
- -body {loops-foo-num $size}
- bench -desc "LOOP while (to $size)" \
- -body {loops-while-num $size}
- bench -desc "LOOP while 1 (to $size)" \
- -body {loops-while-1 $size}
- #bench -desc "LOOP for, iterate string" \
- -body {loops-for-string $string}
- #bench -desc "LOOP foreach, iterate string" \
- -body {loops-foreach-string $string}
- }
- }
- proc bench {- name - body} {
- uplevel 1 $body
- }
- if {[llength $argv]} {
- set num [lindex $argv 0]
- } else {
- set num 100
- }
- go $num