add gs
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
return function()
|
||||
local spring = require(script.Parent.spring)
|
||||
|
||||
it("should have all expected APIs", function()
|
||||
expect(spring).to.be.a("function")
|
||||
|
||||
local s = spring(1, {
|
||||
dampingRatio = 0.1,
|
||||
frequency = 10,
|
||||
})
|
||||
|
||||
expect(s).to.be.a("table")
|
||||
expect(s.step).to.be.a("function")
|
||||
|
||||
-- handle when spring lacks option table
|
||||
s = spring(1)
|
||||
|
||||
expect(s).to.be.a("table")
|
||||
expect(s.step).to.be.a("function")
|
||||
end)
|
||||
|
||||
it("should handle being still correctly", function()
|
||||
local s = spring(1, {
|
||||
dampingRatio = 0.1,
|
||||
frequency = 10,
|
||||
})
|
||||
|
||||
local state = s:step({
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}, 1)
|
||||
|
||||
expect(state.value).to.equal(1)
|
||||
expect(state.velocity).to.equal(0)
|
||||
expect(state.complete).to.equal(true)
|
||||
end)
|
||||
|
||||
it("should return not complete when in motion", function()
|
||||
local goal = spring(100, {
|
||||
dampingRatio = 0.1,
|
||||
frequency = 10,
|
||||
})
|
||||
|
||||
local state = {
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}
|
||||
|
||||
state = goal:step(state, 1e-3)
|
||||
|
||||
expect(state.value < 100).to.equal(true)
|
||||
expect(state.velocity > 0).to.equal(true)
|
||||
expect(state.complete).to.equal(false)
|
||||
end)
|
||||
|
||||
describe("should eventaully complete when", function()
|
||||
it("is critically damped", function()
|
||||
local s = spring(3, {
|
||||
dampingRatio = 1,
|
||||
frequency = 0.5,
|
||||
})
|
||||
|
||||
local state = {
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}
|
||||
|
||||
while not state.complete do
|
||||
state = s:step(state, 0.5)
|
||||
end
|
||||
|
||||
expect(state.complete).to.equal(true)
|
||||
expect(state.value).to.equal(3)
|
||||
expect(state.velocity).to.equal(0)
|
||||
end)
|
||||
|
||||
it("is over damped", function()
|
||||
local s = spring(3, {
|
||||
dampingRatio = 10,
|
||||
frequency = 0.5,
|
||||
})
|
||||
|
||||
local state = {
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}
|
||||
|
||||
while not state.complete do
|
||||
state = s:step(state, 0.5)
|
||||
end
|
||||
|
||||
expect(state.complete).to.equal(true)
|
||||
expect(state.value).to.equal(3)
|
||||
expect(state.velocity).to.equal(0)
|
||||
end)
|
||||
|
||||
it("is under damped", function()
|
||||
local s = spring(3, {
|
||||
dampingRatio = 0.1,
|
||||
frequency = 0.5,
|
||||
})
|
||||
|
||||
local state = {
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}
|
||||
|
||||
while not state.complete do
|
||||
state = s:step(state, 0.5)
|
||||
end
|
||||
|
||||
expect(state.complete).to.equal(true)
|
||||
expect(state.value).to.equal(3)
|
||||
expect(state.velocity).to.equal(0)
|
||||
end)
|
||||
end)
|
||||
|
||||
it("should remain complete when completed", function()
|
||||
local s = spring(3, {
|
||||
dampingRatio = 1,
|
||||
frequency = 0.5,
|
||||
})
|
||||
|
||||
local state = {
|
||||
value = 1,
|
||||
velocity = 0,
|
||||
complete = false,
|
||||
}
|
||||
|
||||
while not state.complete do
|
||||
state = s:step(state, 0.5)
|
||||
end
|
||||
state = s:step(state, 0.5)
|
||||
|
||||
expect(state.complete).to.equal(true)
|
||||
expect(state.value).to.equal(3)
|
||||
expect(state.velocity).to.equal(0)
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user