function new ( new )
do
local q = new ( 10 ) ;
assert_equal ( q.size , 10 ) ;
assert_equal ( q : count ( ) , 0 ) ;
assert_is ( q : push ( " one " ) ) ;
assert_is ( q : push ( " two " ) ) ;
assert_is ( q : push ( " three " ) ) ;
for i = 4 , 10 do
assert_is ( q : push ( " hello " ) ) ;
assert_equal ( q : count ( ) , i , " count is not " .. i .. " ( " .. q : count ( ) .. " ) " ) ;
end
assert_equal ( q : push ( " hello " ) , nil , " queue overfull! " ) ;
assert_equal ( q : push ( " hello " ) , nil , " queue overfull! " ) ;
assert_equal ( q : pop ( ) , " one " , " queue item incorrect " ) ;
assert_equal ( q : pop ( ) , " two " , " queue item incorrect " ) ;
assert_is ( q : push ( " hello " ) ) ;
assert_is ( q : push ( " hello " ) ) ;
assert_equal ( q : pop ( ) , " three " , " queue item incorrect " ) ;
assert_is ( q : push ( " hello " ) ) ;
assert_equal ( q : push ( " hello " ) , nil , " queue overfull! " ) ;
assert_equal ( q : push ( " hello " ) , nil , " queue overfull! " ) ;
assert_equal ( q : count ( ) , 10 , " queue count incorrect " ) ;
for _ = 1 , 10 do
assert_equal ( q : pop ( ) , " hello " , " queue item incorrect " ) ;
end
assert_equal ( q : count ( ) , 0 , " queue count incorrect " ) ;
assert_is ( q : push ( 1 ) ) ;
for i = 1 , 1001 do
assert_equal ( q : pop ( ) , i ) ;
assert_equal ( q : count ( ) , 0 ) ;
assert_is ( q : push ( i + 1 ) ) ;
assert_equal ( q : count ( ) , 1 ) ;
end
assert_equal ( q : pop ( ) , 1002 ) ;
assert_is ( q : push ( 1 ) ) ;
for i = 1 , 1000 do
assert_equal ( q : pop ( ) , i ) ;
assert_is ( q : push ( i + 1 ) ) ;
end
assert_equal ( q : pop ( ) , 1001 ) ;
assert_equal ( q : count ( ) , 0 ) ;
end
do
-- Test queues that purge old items when pushing to a full queue
local q = new ( 10 , true ) ;
for i = 1 , 10 do
q : push ( i ) ;
end
assert_equal ( q : count ( ) , 10 ) ;
assert_is ( q : push ( 11 ) ) ;
assert_equal ( q : count ( ) , 10 ) ;
assert_equal ( q : pop ( ) , 2 ) ; -- First item should have been purged
for i = 12 , 32 do
assert_is ( q : push ( i ) ) ;
end
assert_equal ( q : count ( ) , 10 ) ;
assert_equal ( q : pop ( ) , 23 ) ;
end
end