mirror of
https://github.com/love2d/love.git
synced 2026-08-13 00:50:51 +02:00
f846d4ab91
- spaced out object class tests and added more defined comment groups - changed reusing vars in case it causes unexpected asserts in future - fixed some shape:point test having wrong params - added assertTrue + assertFalse for basic checks - used assertRange more for some of the physics + audio tests
138 lines
4.2 KiB
Lua
138 lines
4.2 KiB
Lua
-- love.thread
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
----------------------------------OBJECTS---------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
-- Channel (love.thread.newChannel)
|
|
love.test.thread.Channel = function(test)
|
|
|
|
-- create channel
|
|
local channel = love.thread.getChannel('test')
|
|
test:assertObject(channel)
|
|
|
|
-- setup thread to use
|
|
local threadcode1 = [[
|
|
require("love.timer")
|
|
love.timer.sleep(0.1)
|
|
love.thread.getChannel('test'):push('hello world')
|
|
love.timer.sleep(0.1)
|
|
love.thread.getChannel('test'):push('me again')
|
|
]]
|
|
local thread1 = love.thread.newThread(threadcode1)
|
|
thread1:start()
|
|
|
|
-- check message sent from thread to channel
|
|
local msg1 = channel:demand()
|
|
test:assertEquals('hello world', msg1, 'check 1st message was sent')
|
|
thread1:wait()
|
|
test:assertEquals(1, channel:getCount(), 'check still another message')
|
|
test:assertEquals('me again', channel:peek(), 'check 2nd message pending')
|
|
local msg2 = channel:pop()
|
|
test:assertEquals('me again', msg2, 'check 2nd message was sent')
|
|
channel:clear()
|
|
|
|
-- setup another thread for some ping pong
|
|
local threadcode2 = [[
|
|
local function setChannel(channel, value)
|
|
channel:clear()
|
|
return channel:push(value)
|
|
end
|
|
local channel = love.thread.getChannel('test')
|
|
local waiting = true
|
|
local sent = nil
|
|
while waiting == true do
|
|
if sent == nil then
|
|
sent = channel:performAtomic(setChannel, 'ping')
|
|
end
|
|
if channel:hasRead(sent) then
|
|
local msg = channel:demand()
|
|
if msg == 'pong' then
|
|
channel:push(msg)
|
|
waiting = false
|
|
end
|
|
end
|
|
end
|
|
]]
|
|
|
|
-- first we run a thread that will send 1 ping
|
|
local thread2 = love.thread.newThread(threadcode2)
|
|
thread2:start()
|
|
|
|
-- we wait for that ping to be sent and then send a pong back
|
|
local msg3 = channel:demand()
|
|
test:assertEquals('ping', msg3, 'check message recieved 1')
|
|
|
|
-- thread should be waiting for us, and checking is the ping was read
|
|
channel:supply('pong', 1)
|
|
|
|
-- if it was then it should send back our pong and thread should die
|
|
thread2:wait()
|
|
local msg4 = channel:pop()
|
|
test:assertEquals('pong', msg4, 'check message recieved 2')
|
|
test:assertEquals(0, channel:getCount())
|
|
|
|
end
|
|
|
|
|
|
-- Thread (love.thread.newThread)
|
|
love.test.thread.Thread = function(test)
|
|
|
|
-- create thread
|
|
local threadcode = [[
|
|
local b = 0
|
|
for a=1,100000 do
|
|
b = b + a
|
|
end
|
|
]]
|
|
local thread = love.thread.newThread(threadcode)
|
|
test:assertObject(thread)
|
|
|
|
-- check thread runs
|
|
thread:start()
|
|
test:assertTrue(thread:isRunning(), 'check started')
|
|
thread:wait()
|
|
test:assertFalse(thread:isRunning(), 'check finished')
|
|
test:assertEquals(nil, thread:getError(), 'check no errors')
|
|
|
|
-- check an invalid thread
|
|
local badthreadcode = 'local b = 0\nreturn b + "string" .. 10'
|
|
local badthread = love.thread.newThread(badthreadcode)
|
|
badthread:start()
|
|
badthread:wait()
|
|
test:assertNotNil(badthread:getError())
|
|
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
----------------------------------METHODS---------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
-- love.thread.getChannel
|
|
-- @NOTE this is just basic nil checking, objs have their own test method
|
|
love.test.thread.getChannel = function(test)
|
|
test:assertObject(love.thread.getChannel('test'))
|
|
end
|
|
|
|
|
|
-- love.thread.newChannel
|
|
-- @NOTE this is just basic nil checking, objs have their own test method
|
|
love.test.thread.newChannel = function(test)
|
|
test:assertObject(love.thread.newChannel())
|
|
end
|
|
|
|
|
|
-- love.thread.newThread
|
|
-- @NOTE this is just basic nil checking, objs have their own test method
|
|
love.test.thread.newThread = function(test)
|
|
test:assertObject(love.thread.newThread('classes/TestSuite.lua'))
|
|
end
|