mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-03 18:39:19 +00:00 
			
		
		
		
	Add granular testing
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	
This commit is contained in:
		
							parent
							
								
									23bf021f01
								
							
						
					
					
						commit
						8ed8c2a0e0
					
				
					 2 changed files with 62 additions and 10 deletions
				
			
		| 
						 | 
					@ -80,13 +80,13 @@ local function observers_new<T...>(
 | 
				
			||||||
				local rel = jecs.ECS_PAIR_SECOND(term)
 | 
									local rel = jecs.ECS_PAIR_SECOND(term)
 | 
				
			||||||
				local tgt = jecs.ECS_PAIR_SECOND(term)
 | 
									local tgt = jecs.ECS_PAIR_SECOND(term)
 | 
				
			||||||
				local wc = tgt == jecs.w
 | 
									local wc = tgt == jecs.w
 | 
				
			||||||
				local onremoved = world:removed(term, function(entity, id)
 | 
									local onremoved = world:removed(rel, function(entity, id)
 | 
				
			||||||
 | 
										if not wc and term ~= tgt then
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
					local r = jecs.record(world, entity)
 | 
										local r = jecs.record(world, entity)
 | 
				
			||||||
					local archetype = r.archetype
 | 
										local archetype = r.archetype
 | 
				
			||||||
					if archetype then
 | 
										if archetype then
 | 
				
			||||||
						if not wc and id ~= tgt then
 | 
					 | 
				
			||||||
							return
 | 
					 | 
				
			||||||
						end
 | 
					 | 
				
			||||||
						local dst = jecs.archetype_traverse_remove(world, id, archetype)
 | 
											local dst = jecs.archetype_traverse_remove(world, id, archetype)
 | 
				
			||||||
						if archetypes[dst.id] then
 | 
											if archetypes[dst.id] then
 | 
				
			||||||
							callback(entity)
 | 
												callback(entity)
 | 
				
			||||||
| 
						 | 
					@ -218,12 +218,12 @@ local function monitors_new<T...>(query: Query<T...>): Observer<T...>
 | 
				
			||||||
					if callback_removed == nil then
 | 
										if callback_removed == nil then
 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
 | 
										if not wc and id ~= term then
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
					local r = jecs.record(world, entity)
 | 
										local r = jecs.record(world, entity)
 | 
				
			||||||
					local archetype = r.archetype
 | 
										local archetype = r.archetype
 | 
				
			||||||
					if archetype then
 | 
										if archetype then
 | 
				
			||||||
						if not wc and id ~= term then
 | 
					 | 
				
			||||||
							return
 | 
					 | 
				
			||||||
						end
 | 
					 | 
				
			||||||
						local dst = jecs.archetype_traverse_remove(world, id, archetype)
 | 
											local dst = jecs.archetype_traverse_remove(world, id, archetype)
 | 
				
			||||||
						if archetypes[dst.id] then
 | 
											if archetypes[dst.id] then
 | 
				
			||||||
							callback_removed(entity)
 | 
												callback_removed(entity)
 | 
				
			||||||
| 
						 | 
					@ -234,6 +234,9 @@ local function monitors_new<T...>(query: Query<T...>): Observer<T...>
 | 
				
			||||||
					if callback_added == nil then
 | 
										if callback_added == nil then
 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
 | 
										if not wc and id ~= term then
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
					local r = jecs.record(world, entity)
 | 
										local r = jecs.record(world, entity)
 | 
				
			||||||
					local archetype = r.archetype
 | 
										local archetype = r.archetype
 | 
				
			||||||
					if archetype then
 | 
										if archetype then
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,12 +24,16 @@ TEST("addons/ob", function()
 | 
				
			||||||
		CHECK(c==2)
 | 
							CHECK(c==2)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do CASE "Should support query:without(pair(R, t1)) when adding pair(R, t2)"
 | 
						do CASE "Should enter monitor at query:without(pair(R, t1)) when adding pair(R, t2)"
 | 
				
			||||||
		local A = world:component()
 | 
							local A = world:component()
 | 
				
			||||||
		local B = world:component()
 | 
							local B = world:component()
 | 
				
			||||||
		local C = world:component()
 | 
							local C = world:component()
 | 
				
			||||||
		local D = world:component()
 | 
							local D = world:component()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local e = world:entity()
 | 
				
			||||||
 | 
							world:add(e, A)
 | 
				
			||||||
 | 
							world:add(e, jecs.pair(B, D))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local c = 1
 | 
							local c = 1
 | 
				
			||||||
		local r = 1
 | 
							local r = 1
 | 
				
			||||||
		local monitor = ob.monitor(world:query(A):without(jecs.pair(B, C)))
 | 
							local monitor = ob.monitor(world:query(A):without(jecs.pair(B, C)))
 | 
				
			||||||
| 
						 | 
					@ -51,7 +55,52 @@ TEST("addons/ob", function()
 | 
				
			||||||
		CHECK(r==2)
 | 
							CHECK(r==2)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do CASE "Should support query:without(pair(R, *)) when adding pair(R, t1)"
 | 
						do CASE "Should enter monitor at query:without(pair(R, t1)) when removing pair(R, t1)"
 | 
				
			||||||
 | 
							local A = world:component()
 | 
				
			||||||
 | 
							local B = world:component()
 | 
				
			||||||
 | 
							local C = world:component()
 | 
				
			||||||
 | 
							local D = world:component()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							print("B", B)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local e = world:entity()
 | 
				
			||||||
 | 
							world:add(e, A)
 | 
				
			||||||
 | 
							world:add(e, jecs.pair(B, D))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local c = 1
 | 
				
			||||||
 | 
							local r = 1
 | 
				
			||||||
 | 
							local monitor = ob.monitor(world:query(A):without(jecs.pair(B, D)))
 | 
				
			||||||
 | 
							monitor.added(function()
 | 
				
			||||||
 | 
								c += 1
 | 
				
			||||||
 | 
							end)
 | 
				
			||||||
 | 
							monitor.removed(function()
 | 
				
			||||||
 | 
								r += 1
 | 
				
			||||||
 | 
							end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local child = world:entity()
 | 
				
			||||||
 | 
							world:add(child, jecs.pair(B, C))
 | 
				
			||||||
 | 
							world:add(child, jecs.pair(B, D))
 | 
				
			||||||
 | 
							CHECK(c==1)
 | 
				
			||||||
 | 
							world:add(child, A)
 | 
				
			||||||
 | 
							CHECK(c==1)
 | 
				
			||||||
 | 
							world:remove(child, jecs.pair(B, C))
 | 
				
			||||||
 | 
							CHECK(c==1)
 | 
				
			||||||
 | 
							world:add(child, jecs.pair(B, C))
 | 
				
			||||||
 | 
							CHECK(c==1)
 | 
				
			||||||
 | 
							world:remove(child, jecs.pair(B, D))
 | 
				
			||||||
 | 
							CHECK(c==2)
 | 
				
			||||||
 | 
							world:add(child, jecs.pair(B, D))
 | 
				
			||||||
 | 
							CHECK(c==2)
 | 
				
			||||||
 | 
							CHECK(r==2)
 | 
				
			||||||
 | 
							world:remove(child, jecs.pair(B, C))
 | 
				
			||||||
 | 
							CHECK(c==2)
 | 
				
			||||||
 | 
							CHECK(r==2)
 | 
				
			||||||
 | 
							world:remove(child, jecs.pair(B, D))
 | 
				
			||||||
 | 
							CHECK(c==3)
 | 
				
			||||||
 | 
							CHECK(r==2)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do CASE "Should enter monitor at query:without(pair(R, *)) when adding pair(R, t1)"
 | 
				
			||||||
		local A = world:component()
 | 
							local A = world:component()
 | 
				
			||||||
		local B = world:component()
 | 
							local B = world:component()
 | 
				
			||||||
		local C = world:component()
 | 
							local C = world:component()
 | 
				
			||||||
| 
						 | 
					@ -78,7 +127,7 @@ TEST("addons/ob", function()
 | 
				
			||||||
		CHECK(r==2)
 | 
							CHECK(r==2)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do CASE "Should support query:without()"
 | 
						do CASE "Should enter monitor at query:without(t1) when removing t1"
 | 
				
			||||||
		local A = world:component()
 | 
							local A = world:component()
 | 
				
			||||||
		local B = world:component()
 | 
							local B = world:component()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue