# -*- tcl -*- # 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 Ajuba Solutions. # All rights reserved. # # RCS: @(#) $Id: queue.testsuite,v 1.1 2008/07/02 23:35:07 andreas_kupries Exp $ # ------------------------------------------------------------------------- ::tcltest::testConstraint queue_critcl [string equal $impl critcl] #---------------------------------------------------------------------- test queue-${impl}-0.1 {queue errors} { queue myqueue catch {queue myqueue} msg myqueue destroy set msg } "command \"::myqueue\" already exists, unable to create queue" test queue-${impl}-0.2 {queue errors} { queue myqueue catch {myqueue} msg myqueue destroy set msg } "wrong # args: should be \"$MY option ?arg arg ...?\"" test queue-${impl}-0.3 {queue errors} { queue myqueue catch {myqueue foo} msg myqueue destroy set msg } "bad option \"foo\": must be clear, destroy, get, peek, put, size, or unget" test queue-${impl}-0.4 {queue errors} { catch {queue set} msg set msg } "command \"::set\" already exists, unable to create queue" test queue-${impl}-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-${impl}-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-${impl}-2.1 {queue destroy} { queue myqueue myqueue destroy info commands ::myqueue } {} test queue-${impl}-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-${impl}-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-${impl}-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-${impl}-4.1 {put operation} { queue myqueue catch {myqueue put} msg myqueue destroy set msg } "wrong # args: should be \"$MY put item ?item ...?\"" test queue-${impl}-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-${impl}-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-${impl}-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-${impl}-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-${impl}-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-${impl}-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-${impl}-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-${impl}-6.2 {peek operation} { queue myqueue catch {myqueue peek 0} msg myqueue destroy set msg } {invalid item count 0} test queue-${impl}-6.3 {peek operation} { queue myqueue catch {myqueue peek -1} msg myqueue destroy set msg } {invalid item count -1} test queue-${impl}-6.4 {peek operation} { queue myqueue catch {myqueue peek} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-${impl}-6.5 {peek operation} { queue myqueue myqueue put a catch {myqueue peek 2} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-${impl}-6.6 {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-${impl}-6.7 {get operation} { queue myqueue catch {myqueue get 0} msg myqueue destroy set msg } {invalid item count 0} test queue-${impl}-6.8 {get operation} { queue myqueue catch {myqueue get -1} msg myqueue destroy set msg } {invalid item count -1} test queue-${impl}-6.9 {get operation} { queue myqueue catch {myqueue get} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-${impl}-6.10 {get operation} { queue myqueue myqueue put a catch {myqueue get 2} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-${impl}-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] test queue-${impl}-8.1 {unget operation, not enough arguments} { queue myqueue catch {myqueue unget} msg myqueue destroy set msg } [tmWrong unget {item} 0] test queue-${impl}-8.2 {unget operation, too many arguments} { queue myqueue catch {myqueue unget a b} msg myqueue destroy set msg } [tmTooMany unget {item}] test queue-${impl}-8.3 {unget, empty queue} { queue myqueue myqueue unget foo set res [myqueue peek [myqueue size]] myqueue destroy set res } {foo} test queue-${impl}-8.4 {unget, nonempty queue} { queue myqueue myqueue put a b c myqueue unget foo set res [myqueue peek [myqueue size]] myqueue destroy set res } {foo a b c}