# -*- 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.test,v 1.5 2002/02/01 21:51:42 andreas_kupries Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import ::tcltest::* } source [file join [file dirname [info script]] queue.tcl] namespace import struct::queue::queue 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 {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-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 {peek operation} { queue myqueue catch {myqueue peek 0} msg myqueue destroy set msg } {invalid item count 0} test queue-6.3 {peek operation} { queue myqueue catch {myqueue peek -1} msg myqueue destroy set msg } {invalid item count -1} test queue-6.4 {peek operation} { queue myqueue catch {myqueue peek} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-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-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-6.7 {get operation} { queue myqueue catch {myqueue get 0} msg myqueue destroy set msg } {invalid item count 0} test queue-6.8 {get operation} { queue myqueue catch {myqueue get -1} msg myqueue destroy set msg } {invalid item count -1} test queue-6.9 {get operation} { queue myqueue catch {myqueue get} msg myqueue destroy set msg } {insufficient items in queue to fill request} test queue-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-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