# -*- tcl -*- #--------------------------------------------------------------------- # TITLE: # romannumeral # # AUTHOR: # Kenneth Green, 28 Sep 2005 # # DESCRIPTION: # tcltest test cases for romannumeral.tcl # Note: # Assumes Tcl 8.3 # The tests assume tcltest 2.2 # ------------------------------------------------------------------------- source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.3 testsNeedTcltest 2.2 support { useLocal math.tcl math } testing { useLocal romannumerals.tcl math::roman } #===================================================================== # S u p p o r t F u n c t i o n s #===================================================================== #--------------------------------------------------------------------- # cleanup -- # # cleanup before each test #--------------------------------------------------------------------- proc cleanup {} { global errorInfo } #===================================================================== # I n i t i a l i s a t i o n #===================================================================== ::tcltest::testConstraint tk [info exists tk_version] #===================================================================== # T e s t C a s e s #===================================================================== #----------------------------------------------------------------------- # toroman test ToRoman-1.1 {good input} -constraints { } -setup { cleanup } -body { list [catch { list \ [::math::roman::toroman 0] \ [::math::roman::toroman 1] \ [::math::roman::toroman 2] \ [::math::roman::toroman 3] \ [::math::roman::toroman 4] \ [::math::roman::toroman 5] \ [::math::roman::toroman 6] \ [::math::roman::toroman 7] \ [::math::roman::toroman 8] \ [::math::roman::toroman 9] \ [::math::roman::toroman 10] \ [::math::roman::toroman 13] \ [::math::roman::toroman 100] \ [::math::roman::toroman 250] \ [::math::roman::toroman 333] \ [::math::roman::toroman 1001] \ [::math::roman::toroman 1963] \ } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 {{} I II III IV V VI VII VIII IX X XIII C CCL CCCXXXIII MI MCMLXIII}} #----------------------------------------------------------------------- # tointeger test ToInteger-2.1 {good input} -constraints { } -setup { cleanup } -body { list [catch { list \ [::math::roman::tointeger ""] \ [::math::roman::tointeger I] \ [::math::roman::tointeger ii] \ [::math::roman::tointeger IiI] \ [::math::roman::tointeger iv] \ [::math::roman::tointeger V] \ [::math::roman::tointeger vI] \ [::math::roman::tointeger vIi] \ [::math::roman::tointeger ViiI] \ [::math::roman::tointeger ix] \ [::math::roman::tointeger X] \ [::math::roman::tointeger XiII] \ [::math::roman::tointeger C] \ [::math::roman::tointeger CCD] \ [::math::roman::tointeger CCCXXXIII] \ [::math::roman::tointeger MI] \ [::math::roman::tointeger MCMXXXVI] \ } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 {0 1 2 3 4 5 6 7 8 9 10 13 100 500 333 1001 1936}} #----------------------------------------------------------------------- # combined test Combined-3.1 {good input} -constraints { } -setup { cleanup } -body { list [catch { for { set i 0 } { $i < 11666 } { incr i } { set r [::math::roman::toroman $i] set j [::math::roman::tointeger $r] if { $i != $j } { error "Mismatch i ($i) -> r ($r) -> j ($j)" } } } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 {}} #----------------------------------------------------------------------- # sort test Sort-4.1 {good input} -constraints { } -setup { cleanup } -body { list [catch { set l {X III IV I V} ::math::roman::sort $l \ } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 {I III IV V X}} #----------------------------------------------------------------------- # expr test Expr-5.1 {plus} -constraints { } -setup { cleanup } -body { list [catch { set x 23 set xr [::math::roman::toroman $x] set y 77 set yr [::math::roman::toroman $y] set xr+yr [::math::roman::expr $xr + $yr] expr [::math::roman::tointeger ${xr+yr}] == [expr $x + $y] } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 1} test Expr-5.2 {minus} -constraints { } -setup { cleanup } -body { list [catch { set x 23 set xr [::math::roman::toroman $x] set y 77 set yr [::math::roman::toroman $y] set yr-xr [::math::roman::expr $yr - $xr] expr [::math::roman::tointeger ${yr-xr}] == [expr $y - $x] } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 1} test Expr-5.3 {times} -constraints { } -setup { cleanup } -body { list [catch { set x 23 set xr [::math::roman::toroman $x] set y 77 set yr [::math::roman::toroman $y] set xr*yr [::math::roman::expr $xr * $yr] expr $x * $y expr [::math::roman::tointeger ${xr*yr}] == [expr $x * $y] } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 1} test Expr-5.4 {divide} -constraints { } -setup { cleanup } -body { list [catch { set x 23 set xr [::math::roman::toroman $x] set y 77 set yr [::math::roman::toroman $y] set yr/xr [::math::roman::expr $yr / $xr] expr [::math::roman::tointeger ${yr/xr}] == [expr $y / $x] } errMsg] [set errMsg] } -cleanup { cleanup } -result {0 1} #--------------------------------------------------------------------- # Clean up cleanup testsuiteCleanup