diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/queue.test | 186 | ||||
-rw-r--r-- | tests/stackstruct.test | 228 |
2 files changed, 414 insertions, 0 deletions
diff --git a/tests/queue.test b/tests/queue.test new file mode 100644 index 0000000..3ec365c --- /dev/null +++ b/tests/queue.test @@ -0,0 +1,186 @@ +# queue.test: tests for the queue package. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1998-2000 by Scriptics Corporation. +# All rights reserved. +# +# RCS: @(#) $Id: queue.test,v 1.1 2000/02/05 03:20:21 ericm Exp $ + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest + namespace import ::tcltest::* +} + +package require struct +namespace import struct::* + +test queue-0.1 {queue errors} { + queue myqueue + catch {queue myqueue} msg + myqueue destroy + set msg +} "command \"myqueue\" already exists, unable to create queue" +test queue-0.2 {queue errors} { + queue myqueue + catch {myqueue} msg + myqueue destroy + set msg +} "wrong # args: should be \"myqueue option ?arg arg ...?\"" +test queue-0.3 {queue errors} { + queue myqueue + catch {myqueue foo} msg + myqueue destroy + set msg +} "bad option \"foo\": must be clear, destroy, get, peek, put, or size" +test queue-0.4 {queue errors} { + catch {::struct::queue::QueueProc myqueue} msg + set msg +} "unknown queue \"myqueue\"" +test queue-0.5 {queue errors} { + catch {queue set} msg + set msg +} "command \"set\" already exists, unable to create queue" + +test queue-1.1 {queue creation} { + set foo [queue myqueue] + set cmd [info commands ::myqueue] + set size [myqueue size] + myqueue destroy + list $foo $cmd $size +} {myqueue ::myqueue 0} +test queue-1.2 {queue creation} { + set foo [queue] + set cmd [info commands ::$foo] + set size [$foo size] + $foo destroy + list $foo $cmd $size +} {queue1 ::queue1 0} + +test queue-2.1 {queue destroy} { + queue myqueue + myqueue destroy + info commands ::myqueue +} {} +test queue-2.2 {queue destroy} { + queue myqueue + myqueue destroy + catch {::struct::queue::QueueProc myqueue} msg + set msg +} "unknown queue \"myqueue\"" + +test queue-3.2 {size operation} { + queue myqueue + myqueue put a b c d e f g + set size [myqueue size] + myqueue destroy + set size +} 7 +test queue-3.3 {size operation} { + queue myqueue + myqueue put a b c d e f g + myqueue get 3 + set size [myqueue size] + myqueue destroy + set size +} 4 +test queue-3.4 {size operation} { + queue myqueue + myqueue put a b c d e f g + myqueue get 3 + myqueue peek 3 + set size [myqueue size] + myqueue destroy + set size +} 4 + +test queue-4.1 {put operation} { + queue myqueue + catch {myqueue put} msg + myqueue destroy + set msg +} "wrong # args: should be \"myqueue put item ?item ...?\"" +test queue-4.2 {put operation, singleton items} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [list [myqueue get] [myqueue get] [myqueue get]] + myqueue destroy + set result +} "a b c" +test queue-4.3 {put operation, multiple items} { + queue myqueue + myqueue put a b c + set result [list [myqueue get] [myqueue get] [myqueue get]] + myqueue destroy + set result +} "a b c" +test queue-4.4 {put operation, spaces in items} { + queue myqueue + myqueue put a b "foo bar" + set result [list [myqueue get] [myqueue get] [myqueue get]] + myqueue destroy + set result +} [list a b "foo bar"] +test queue-4.5 {put operation, bad chars in items} { + queue myqueue + myqueue put a b \{ + set result [list [myqueue get] [myqueue get] [myqueue get]] + myqueue destroy + set result +} [list a b \{] + +test queue-5.1 {get operation} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [list [myqueue get] [myqueue get] [myqueue get]] + myqueue destroy + set result +} [list a b c] +test queue-5.2 {get operation, multiple items} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [myqueue get 3] + myqueue destroy + set result +} [list a b c] + +test queue-6.1 {peek operation} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [list [myqueue peek] [myqueue peek] [myqueue peek]] + myqueue destroy + set result +} [list a a a] +test queue-6.2 {get operation, multiple items} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [list [myqueue peek 3] [myqueue get 3]] + myqueue destroy + set result +} [list [list a b c] [list a b c]] + +test queue-7.1 {clear operation} { + queue myqueue + myqueue put a + myqueue put b + myqueue put c + set result [list [myqueue peek 3]] + myqueue clear + lappend result [myqueue size] + myqueue destroy + set result +} [list [list a b c] 0] + +::tcltest::cleanupTests diff --git a/tests/stackstruct.test b/tests/stackstruct.test new file mode 100644 index 0000000..6a5e3c5 --- /dev/null +++ b/tests/stackstruct.test @@ -0,0 +1,228 @@ +# stack.test: tests for the stack package. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1998-2000 by Scriptics Corporation. +# All rights reserved. +# +# RCS: @(#) $Id: stackstruct.test,v 1.1 2000/02/05 03:20:21 ericm Exp $ + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest + namespace import ::tcltest::* +} + +package require struct +namespace import struct::* + +test stack-0.1 {stack errors} { + stack mystack + catch {stack mystack} msg + mystack destroy + set msg +} "command \"mystack\" already exists, unable to create stack" +test stack-0.2 {stack errors} { + stack mystack + catch {mystack} msg + mystack destroy + set msg +} "wrong # args: should be \"mystack option ?arg arg ...?\"" +test stack-0.3 {stack errors} { + stack mystack + catch {mystack foo} msg + mystack destroy + set msg +} "bad option \"foo\": must be clear, destroy, peek, pop, push, rotate, or size" +test stack-0.4 {stack errors} { + catch {::struct::stack::StackProc mystack} msg + set msg +} "unknown stack \"mystack\"" +test stack-0.5 {stack errors} { + catch {stack set} msg + set msg +} "command \"set\" already exists, unable to create stack" + +test stack-1.1 {stack creation} { + set foo [stack mystack] + set cmd [info commands ::mystack] + set size [mystack size] + mystack destroy + list $foo $cmd $size +} {mystack ::mystack 0} +test stack-1.2 {stack creation} { + set foo [stack] + set cmd [info commands ::$foo] + set size [$foo size] + $foo destroy + list $foo $cmd $size +} {stack1 ::stack1 0} + +test stack-2.1 {stack destroy} { + stack mystack + mystack destroy + info commands ::mystack +} {} +test stack-2.2 {stack destroy} { + stack mystack + mystack destroy + catch {::struct::stack::StackProc mystack} msg + set msg +} "unknown stack \"mystack\"" + +test stack-3.2 {size operation} { + stack mystack + mystack push a b c d e f g + set size [mystack size] + mystack destroy + set size +} 7 +test stack-3.3 {size operation} { + stack mystack + mystack push a b c d e f g + mystack pop 3 + set size [mystack size] + mystack destroy + set size +} 4 +test stack-3.4 {size operation} { + stack mystack + mystack push a b c d e f g + mystack pop 3 + mystack peek 3 + set size [mystack size] + mystack destroy + set size +} 4 + +test stack-4.1 {push operation} { + stack mystack + catch {mystack push} msg + mystack destroy + set msg +} "wrong # args: should be \"mystack push item ?item ...?\"" +test stack-4.2 {push operation, singleton items} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [list [mystack pop] [mystack pop] [mystack pop]] + mystack destroy + set result +} "c b a" +test stack-4.3 {push operation, multiple items} { + stack mystack + mystack push a b c + set result [list [mystack pop] [mystack pop] [mystack pop]] + mystack destroy + set result +} "c b a" +test stack-4.4 {push operation, spaces in items} { + stack mystack + mystack push a b "foo bar" + set result [list [mystack pop] [mystack pop] [mystack pop]] + mystack destroy + set result +} [list "foo bar" b a] +test stack-4.5 {push operation, bad chars in items} { + stack mystack + mystack push a b \{ + set result [list [mystack pop] [mystack pop] [mystack pop]] + mystack destroy + set result +} [list \{ b a] + +test stack-5.1 {pop operation} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [list [mystack pop] [mystack pop] [mystack pop]] + mystack destroy + set result +} [list c b a] +test stack-5.2 {pop operation, multiple items} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [mystack pop 3] + mystack destroy + set result +} [list c b a] + +test stack-6.1 {peek operation} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [list [mystack peek] [mystack peek] [mystack peek]] + mystack destroy + set result +} [list c c c] +test stack-6.2 {pop operation, multiple items} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [list [mystack peek 3] [mystack pop 3]] + mystack destroy + set result +} [list [list c b a] [list c b a]] + +test stack-7.1 {clear operation} { + stack mystack + mystack push a + mystack push b + mystack push c + set result [list [mystack peek 3]] + mystack clear + lappend result [mystack size] + mystack destroy + set result +} [list [list c b a] 0] + +test stack-8.1 {rotate operation} { + stack mystack + mystack push a b c d e f g h + mystack rotate 3 1 + set result [mystack peek [mystack size]] + mystack destroy + set result +} [list g f h e d c b a] +test stack-8.2 {rotate operation} { + stack mystack + mystack push a b c d e f g h + mystack rotate 3 2 + set result [mystack peek [mystack size]] + mystack destroy + set result +} [list f h g e d c b a] +test stack-8.3 {rotate operation} { + stack mystack + mystack push a b c d e f g h + mystack rotate 3 5 + set result [mystack peek [mystack size]] + mystack destroy + set result +} [list f h g e d c b a] +test stack-8.4 {rotate operation} { + stack mystack + mystack push a b c d e f g h + mystack rotate 8 1 + set result [mystack peek [mystack size]] + mystack destroy + set result +} [list g f e d c b a h] +test stack-8.4 {rotate operation} { + stack mystack + mystack push a b c d e f g h + mystack rotate 8 -1 + set result [mystack peek [mystack size]] + mystack destroy + set result +} [list a h g f e d c b] + + +::tcltest::cleanupTests |