Changeset

8209:39f24de4f53f

tests: Add failing tests for util.async
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Sep 2017 16:16:28 +0100
parents 8208:b69b40a828fd
children 8210:352d605b1178
files tests/test_util_async.lua
diffstat 1 files changed, 160 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test_util_async.lua	Mon Sep 04 10:08:04 2017 +0200
+++ b/tests/test_util_async.lua	Tue Sep 12 16:16:28 2017 +0100
@@ -6,12 +6,12 @@
 -- Multiple runners
 
 function runner(new_runner, async)
-	local function new(func)
+	local function new(func, name)
 		local log = {};
 		return new_runner(func, setmetatable({}, {
 			__index = function (_, event)
 				return function (runner, err)
-					print("event", event, err)
+					print(name, "event", event, err)
 					table.insert(log, { event = event, err = err });
 				end;
 			end;
@@ -22,7 +22,7 @@
 	local r, l = new(function (item) assert(type(item) == "number") end);
 	r:run(1);
 	r:run(2);
-	for k, v in ipairs(l) do print(k,v) end
+	--for k, v in ipairs(l) do print(k,v) end
 
 	--------------------
 	local wait, done;
@@ -43,7 +43,7 @@
 	assert(r.state == "waiting");
 	done();
 	assert(r.state == "ready");
-	for k, v in ipairs(l) do print(k,v) end
+	--for k, v in ipairs(l) do print(k,v) end
 
 	--------------------
 	local wait, done;
@@ -68,7 +68,7 @@
 	assert(r.state == "waiting");
 	done();
 	assert(r.state == "ready");
-	for k, v in ipairs(l) do print(k,v) end
+	--for k, v in ipairs(l) do print(k,v) end
 
 	--------------------
 	local wait, done;
@@ -106,7 +106,7 @@
 	end
 
 	assert(r.state == "ready");
-	for k, v in ipairs(l) do print(k,v) end
+	--for k, v in ipairs(l) do print(k,v) end
 
 	--------------------
 	local wait, done;
@@ -144,5 +144,158 @@
 	assert(r.state == "ready");
 
 	assert(r.state == "ready");
-	for k, v in ipairs(l) do print(k,v) end
+	--for k, v in ipairs(l) do print(k,v) end
+
+	-- Now with multiple runners
+	--------------------
+	local wait1, done1;
+	local last_item1 = 0;
+	local r1, l1 = new(function (item)
+		assert(type(item) == "number")
+		assert((item == last_item1 + 1) or item == 3);
+		last_item1 = item;
+		if item == 3 then
+			wait1, done1 = async.waiter();
+			wait1();
+		end
+	end, "r1");
+
+	local wait2, done2;
+	local last_item2 = 0;
+	local r2, l2 = new(function (item)
+		assert(type(item) == "number")
+		assert((item == last_item2 + 1) or item == 3);
+		last_item2 = item;
+		if item == 3 then
+			wait2, done2 = async.waiter();
+			wait2();
+		end
+	end, "r2");
+	
+	r1:run(1);
+	assert(r1.state == "ready");
+	r1:run(2);
+	assert(r1.state == "ready");
+	
+	local dones = {};
+	r1:run(3);
+	assert(r1.state == "waiting");
+	r1:run(3);
+	assert(r1.state == "waiting");
+
+	r2:run(1);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	r2:run(2);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	r2:run(3);
+	assert(r1.state == "waiting");
+	assert(r2.state == "waiting");
+	done2();
+
+	r2:run(3);
+	assert(r1.state == "waiting");
+	assert(r2.state == "waiting");
+	done2();
+
+	r2:run(2);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	for i = 1, 2 do
+		done1();
+		if i < 2 then
+			assert(r1.state == "waiting");
+		end
+	end
+
+	assert(r1.state == "ready");
+	r1:run(4);
+	assert(r1.state == "ready");
+
+	assert(r1.state == "ready");
+	--for k, v in ipairs(l1) do print(k,v) end
+	
+
+	--------------------
+	local wait1, done1;
+	local last_item1 = 0;
+	local r1, l1 = new(function (item)
+		assert(type(item) == "number")
+		assert((item == last_item1 + 1) or item == 3);
+		last_item1 = item;
+		if item == 3 then
+			wait1, done1 = async.waiter();
+			wait1();
+		end
+	end, "r1");
+
+	local wait2, done2;
+	local last_item2 = 0;
+	local r2, l2 = new(function (item)
+		assert(type(item) == "number")
+		assert((item == last_item2 + 1) or item == 3);
+		last_item2 = item;
+		if item == 3 then
+			wait2, done2 = async.waiter();
+			wait2();
+		end
+	end, "r2");
+	
+	r1:run(1);
+	assert(r1.state == "ready");
+	r1:run(2);
+	assert(r1.state == "ready");
+	
+	r1:run(5);
+	assert(r1.state == "ready");
+
+	local dones = {};
+	r1:run(3);
+	assert(r1.state == "waiting");
+	r1:run(5); -- Will error, when we get to it
+	assert(r1.state == "waiting");
+	r1:run(3);
+	assert(r1.state == "waiting");
+
+	r2:run(1);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	r2:run(2);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	r2:run(3);
+	assert(r1.state == "waiting");
+	assert(r2.state == "waiting");
+	done2();
+
+	r2:run(3);
+	assert(r1.state == "waiting");
+	assert(r2.state == "waiting");
+	done2();
+
+	r2:run(2);
+	assert(r1.state == "waiting");
+	assert(r2.state == "ready");
+
+	for i = 1, 2 do
+		done1();
+		if i < 2 then
+			assert_equal(r1.state, "waiting");
+		end
+	end
+
+	assert(r1.state == "ready");
+	r1:run(4);
+	assert(r1.state == "ready");
+
+	assert(r1.state == "ready");
+	--for k, v in ipairs(l1) do print(k,v) end
+	
+	
 end