File

tests/test_util_queue.lua @ 8269:25237002aba4

mod_limits: Handle fractional outstanding balance values (caused by e3f7b6fa46ba) Fractional values were passed to string.sub() when doing buffer manipulations, and caused random bytes to be skipped in the stream.
author Matthew Wild <mwild1@gmail.com>
date Tue, 26 Sep 2017 17:48:33 +0100
parent 7509:d4bd036e679b
line wrap: on
line source


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