123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- #--------------------------------------------------------*-Tcl-*--
- #
- # csdl.test
- #
- # This package of tests exercises the Cross Section
- # Description Language (CSDL) classes to ensure their
- # functionality.
- #
- # Tests are broken out into several categories
- # llcsdl - low level csdl classes
- # hlcsdl - high level csdl classes
- # stackup - stackup class exercises
- #
- # Source this script to run the tests.
- #
- # Bob Techentin
- # August 28, 2001
- #
- # Copyright 2001-2004 Mayo Foundation. All rights reserved.
- # $Id: csdl.test,v 1.1 2004/02/13 21:07:27 techenti Exp $
- #
- #-----------------------------------------------------------------
- #-----------------------------------------------------------------
- # Put the current directory first in the package path.
- # (Actually, put the parent fo the current directory in
- # the path, as csdl_shapes requires the units package,
- # which should be in a sibling directory.)
- #-----------------------------------------------------------------
- set auto_path [concat [file join [file dirname [info script]] ..] $auto_path]
- #-----------------------------------------------------------------
- # Load the tcltest package and import the test command
- #-----------------------------------------------------------------
- if {[lsearch [namespace children] ::tcltest] == -1} {
- package require tcltest
- namespace import -force ::tcltest::*
- }
- #-----------------------------------------------------------------
- # Load CSDL
- #-----------------------------------------------------------------
- if {[catch {package require csdl} msg]} {
- catch {puts stderr "Cannot load csdl package: '$msg'"}
- return
- }
- #-----------------------------------------------------------------
- # test visitor class
- # This class can exercise the visitor capabilities of
- # the various CSDL classes by simply recording who
- # it is visiting.
- #-----------------------------------------------------------------
- catch {itcl::delete class test-visitor}
- itcl::class test-visitor {
- variable result {}
- set classTypes {
- Stackup GroundPlane DielectricLayer
- RectangleConductors TrapezoidConductors CircleConductors
- Dielectric Conductor Ground
- Rectangle Trapezoid Circle Layer
- }
- # Create a visit method for each class type
- foreach type $classTypes {
- method visit$type {obj x y} \
- "lappend result \"$type \$obj \$x \$y\""
- }
- method clear {} {set result [list]}
- method result {} {return $result}
- }
- #----------------------------------------------------------
- # Shape tests
- #----------------------------------------------------------
- #----------------------------------------------------------
- # Instantiation tests
- #----------------------------------------------------------
- test shape-1.0 {instantiate Shape} {
- # In a perfect world, this would be a pure virtual
- # class, and we couldn't instantiate it.
- catch {itcl::delete object s0}
- set obj [Shape s0]
- itcl::delete object $obj
- set obj
- } {s0}
- test shape-1.1 {instantiate Rectangle} {
- catch {itcl::delete object r0}
- set obj [Rectangle r0]
- itcl::delete object $obj
- set obj
- } {r0}
- test shape-1.2 {instantiate Trapezoid} {
- catch {itcl::delete object t0}
- set obj [Trapezoid t0]
- itcl::delete object $obj
- set obj
- } {t0}
- test shape-1.3 {instantiate Circle} {
- catch {itcl::delete object c0}
- set obj [Circle c0]
- itcl::delete object $obj
- set obj
- } {c0}
- test shape-1.4 {instantiate Layer} {
- catch {itcl::delete object layer0}
- set obj [Layer layer0]
- itcl::delete object $obj
- set obj
- } {layer0}
- #----------------------------------------------------------
- # Basic Shape tests
- #
- # This looks a little strange, but this seems like
- # a good way to run a bunch of shape tests on
- # different kinds of shape objects, like rectangles
- # circles, etc.
- #
- # The test procedures call this proc, which runs tests
- # based on the object class argument. All shape classes
- # should be able to pass these basic functionality tests.
- #----------------------------------------------------------
- proc basic-shape-tests {objClass} {
- catch {itcl::delete object obj0}
- catch {itcl::delete object v}
- # First, make sure that this objClass is really
- # a subclass of shape
- test shape-$objClass-1.0 "$objClass must be subclass of Shape" {
- catch {itcl::delete object obj0}
- $objClass obj0
- set result [obj0 isa Shape]
- itcl::delete object obj0
- set result
- } {1}
- test shape-$objClass-1.1 "Define $objClass name" {
- catch {itcl::delete object obj0}
- $objClass obj0 -name "$objClass object"
- set result [obj0 cget -name]
- itcl::delete object obj0
- set result
- } "$objClass object"
- test shape-$objClass-1.2 "Define $objClass color" {
- catch {itcl::delete object obj0}
- $objClass obj0 -color "green"
- set result [obj0 cget -color]
- itcl::delete object obj0
- set result
- } {green}
- test shape-$objClass-1.3 "Define $objClass description" {
- catch {itcl::delete object obj0}
- $objClass obj0 -description "default $objClass"
- set result [obj0 cget -description]
- itcl::delete object obj0
- set result
- } "default $objClass"
- test shape-$objClass-1.4 "Accept a visitor" {
- catch {itcl::delete object v}
- catch {itcl::delete object obj0}
- test-visitor v
- $objClass obj0
- obj0 accept v 10 10
- set result [v result]
- itcl::delete object v obj0
- set result
- } "{$objClass ::obj0 10 10}"
- }
- #----------------------------------------------------------
- # Rectangle tests
- #----------------------------------------------------------
- basic-shape-tests Rectangle
- test shape-2.1 {Rectangle with height and width} {
- catch {itcl::delete object r0}
- set obj [Rectangle r0 -width 10 -height 10]
- itcl::delete object $obj
- set obj
- } {r0}
- test shape-2.2 {Rectangle with width units} {
- catch {itcl::delete object r0}
- set obj [Rectangle r0 -width 20micron]
- itcl::delete object $obj
- set obj
- } {r0}
- test shape-2.3 {Rectangle with height units} {
- catch {itcl::delete object r0}
- set obj [Rectangle r0 -height 20micron]
- itcl::delete object $obj
- set obj
- } {r0}
- test shape-2.4 {Rectangle with invalid width} {
- catch {itcl::delete object r0}
- catch {Rectangle r0 -width 10seconds} result
- set result
- } {Invalid Dimension 'width': '10seconds' and 'meter' have incompatible units}
- test shape-2.5 {Rectangle with invalid height} {
- catch {itcl::delete object r0}
- catch {Rectangle r0 -height 10seconds} result
- set result
- } {Invalid Dimension 'height': '10seconds' and 'meter' have incompatible units}
- test shape-2.6 {Rectangle width conversion} {
- catch {itcl::delete object r0}
- Rectangle r0 -width 20micron
- set result [expr {[r0 width] == 2e-5}]
- itcl::delete object r0
- set result
- } {1}
- test shape-2.7 {Rectangle height conversion} {
- catch {itcl::delete object r0}
- Rectangle r0 -height 20micron
- set result [expr {[r0 height] == 2e-5}]
- itcl::delete object r0
- set result
- } {1}
- test shape-2.8 {Rectangle area} {
- catch {itcl::delete object r0}
- Rectangle r0 -height 20 -width 10
- set result [expr {[r0 area] == 200}]
- itcl::delete object r0
- set result
- } {1}
- test shape-2.9 {Rectangle area conversion} {
- catch {itcl::delete object r0}
- Rectangle r0 -height 20mm -width 10mm
- set result [expr {[r0 area] == 2e-4}]
- itcl::delete object r0
- set result
- } {1}
- test shape-2.10 {Rectangle circumference} {
- catch {itcl::delete object r0}
- Rectangle r0 -height 20 -width 10
- set result [expr {[r0 circumference] == 60}]
- itcl::delete object r0
- set result
- } {1}
- test shape-2.11 {Rectangle circumference conversion} {
- catch {itcl::delete object r0}
- Rectangle r0 -height 20mm -width 10mm
- set result [expr {[r0 circumference] == 0.06}]
- itcl::delete object r0
- set result
- } {1}
- #----------------------------------------------------------
- # Trapezoid tests
- #----------------------------------------------------------
- basic-shape-tests Trapezoid
- test shape-3.1 {Trapezoid with height and widths} {
- catch {itcl::delete object t0}
- set obj [Trapezoid t0 -topWidth 10 -bottomWidth 15 -height 10]
- itcl::delete object $obj
- set obj
- } {t0}
- test shape-3.2 {Trapezoid with top width units} {
- catch {itcl::delete object t0}
- set obj [Trapezoid t0 -topWidth 20micron]
- itcl::delete object $obj
- set obj
- } {t0}
- test shape-3.3 {Trapezoid with bottom width units} {
- catch {itcl::delete object t0}
- set obj [Trapezoid t0 -bottomWidth 20micron]
- itcl::delete object $obj
- set obj
- } {t0}
- test shape-3.4 {Trapezoid with height units} {
- catch {itcl::delete object t0}
- set obj [Trapezoid t0 -height 20micron]
- itcl::delete object $obj
- set obj
- } {t0}
- test shape-3.5 {Trapezoid with invalid top width} {
- catch {itcl::delete object t0}
- catch {Trapezoid t0 -topWidth 10seconds} result
- set result
- } {Invalid Dimension 'top width': '10seconds' and 'meter' have incompatible units}
- test shape-3.6 {Trapezoid with invalid bottom width} {
- catch {itcl::delete object t0}
- catch {Trapezoid t0 -bottomWidth 10seconds} result
- set result
- } {Invalid Dimension 'bottom width': '10seconds' and 'meter' have incompatible units}
- test shape-3.7 {Trapezoid with invalid height} {
- catch {itcl::delete object t0}
- catch {Trapezoid t0 -height 10seconds} result
- set result
- } {Invalid Dimension 'height': '10seconds' and 'meter' have incompatible units}
- test shape-3.8 {Trapezoid top width conversion} {
- catch {itcl::delete object t0}
- Trapezoid t0 -topWidth 20micron -bottomWidth 10micron
- set result [expr {[t0 width] == 2e-5}]
- itcl::delete object t0
- set result
- } {1}
- test shape-3.9 {Trapezoid height conversion} {
- catch {itcl::delete object t0}
- Trapezoid t0 -height 20micron
- set result [expr {[t0 height] == 2e-5}]
- itcl::delete object t0
- set result
- } {1}
- test shape-3.10 {Trapezoid area} {
- catch {itcl::delete object t0}
- Trapezoid t0 -height 10 -bottomWidth 30 -topWidth 20
- set result [expr {[t0 area] == 250}]
- itcl::delete object t0
- set result
- } {1}
- test shape-3.11 {Trapezoid area conversion} {
- catch {itcl::delete object t0}
- Trapezoid t0 -height 10cm -bottomWidth 30cm -topWidth 20cm
- set result [expr {[t0 area] == 250e-4}]
- itcl::delete object t0
- set result
- } {1}
- test shape-3.12 {Trapezoid circumference} {
- catch {itcl::delete object t0}
- Trapezoid t0 -height 3 -bottomWidth 18 -topWidth 10
- set result [expr {[t0 circumference] == 38}]
- itcl::delete object t0
- set result
- } {1}
- test shape-3.13 {Trapezoid circumference conversion} {
- catch {itcl::delete object t0}
- Trapezoid t0 -height 3cm -bottomWidth 18cm -topWidth 10cm
- set result [expr {[t0 circumference] == 38e-2}]
- itcl::delete object t0
- set result
- } {1}
- #----------------------------------------------------------
- # Circle tests
- #----------------------------------------------------------
- basic-shape-tests Circle
- test shape-4.1 {Circle with diameter} {
- catch {itcl::delete object c0}
- set obj [Circle c0 -diameter 10]
- itcl::delete object $obj
- set obj
- } {c0}
- test shape-4.2 {Circle with diameter units} {
- catch {itcl::delete object c0}
- set obj [Circle c0 -diameter 20micron]
- itcl::delete object $obj
- set obj
- } {c0}
- test shape-4.3 {Circle with invalid diameter} {
- catch {itcl::delete object c0}
- catch {Circle c0 -diameter 10seconds} result
- set result
- } {Invalid Dimension 'diameter': '10seconds' and 'meter' have incompatible units}
- test shape-4.4 {Circle width conversion} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 20micron
- set result [expr {[c0 width] == 2e-5}]
- itcl::delete object c0
- set result
- } {1}
- test shape-4.5 {Circle height conversion} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 20micron
- set result [expr {[c0 height] == 2e-5}]
- itcl::delete object c0
- set result
- } {1}
- test shape-4.6 {Circle area} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 10
- set result [expr {[c0 area] - 78.5398163397 < 1e-7}]
- itcl::delete object c0
- set result
- } {1}
- test shape-4.7 {Circle area conversion} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 10cm
- set result [expr {[c0 area] - 0.00785398163397 < 1e-12}]
- itcl::delete object c0
- set result
- } {1}
- test shape-4.8 {Circle circumference} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 10
- set result [expr {[c0 circumference] - 31.415926535 < 1e-8}]
- itcl::delete object c0
- set result
- } {1}
- test shape-4.9 {Circle circumference conversion} {
- catch {itcl::delete object c0}
- Circle c0 -diameter 10cm
- set result [expr {[c0 circumference] - 0.31415926535 < 1e-10}]
- itcl::delete object c0
- set result
- } {1}
- #----------------------------------------------------------
- # Layer tests
- #----------------------------------------------------------
- basic-shape-tests Layer
- test shape-5.1 {Layer with thickness} {
- catch {itcl::delete object layer0}
- set obj [Layer layer0 -thickness 10]
- itcl::delete object $obj
- set obj
- } {layer0}
- test shape-5.2 {Layer with thickness units} {
- catch {itcl::delete object layer0}
- set obj [Layer layer0 -thickness 20micron]
- itcl::delete object $obj
- set obj
- } {layer0}
- test shape-5.3 {Layer with invalid thickness} {
- catch {itcl::delete object layer0}
- catch {Layer layer0 -thickness 10seconds} result
- set result
- } {Invalid Dimension 'thickness': '10seconds' and 'meter' have incompatible units}
- test shape-5.4 {Layer width conversion} {
- catch {itcl::delete object layer0}
- Layer layer0 -thickness 20micron
- set result [expr {[layer0 width] == 4e-5}]
- itcl::delete object layer0
- set result
- } {1}
- test shape-5.5 {Layer height conversion} {
- catch {itcl::delete object layer0}
- Layer layer0 -thickness 20micron
- set result [expr {[layer0 height] == 2e-5}]
- itcl::delete object layer0
- set result
- } {1}
- #----------------------------------------------------------
- # Instantiation Tests - make sure the classes exist
- #----------------------------------------------------------
- test llcsdl-1.0 {instantiate Dielectric} {
- set obj [Dielectric dielectric0 -shape [Layer layer0 -thickness 10]]
- itcl::delete object dielectric0 layer0
- set obj
- } {dielectric0}
- ::tcltest::cleanupTests
|