local luaunit = require("luaunit") local checks = require("luatypechecks.checks") local Oscillogram = require("luaplot.oscillogram") -- luacheck: globals TestOscillogram TestOscillogram = {} function TestOscillogram.test_new_full() local plot = Oscillogram:new("random", 5, 32, 23, 42) luaunit.assert_is_table(plot) luaunit.assert_true(checks.is_instance(plot, Oscillogram)) luaunit.assert_is_string(plot._kind) luaunit.assert_equals(plot._kind, "random") luaunit.assert_is_table(plot._points) luaunit.assert_equals(plot._points, {32, 32, 32, 32, 32}) luaunit.assert_is_number(plot._default) luaunit.assert_equals(plot._default, 32) luaunit.assert_is_number(plot._minimum) luaunit.assert_equals(plot._minimum, 23) luaunit.assert_is_number(plot._maximum) luaunit.assert_equals(plot._maximum, 42) end function TestOscillogram.test_new_partial() local plot = Oscillogram:new("random", 5) luaunit.assert_is_table(plot) luaunit.assert_true(checks.is_instance(plot, Oscillogram)) luaunit.assert_is_string(plot._kind) luaunit.assert_equals(plot._kind, "random") luaunit.assert_is_table(plot._points) luaunit.assert_equals(plot._points, {0, 0, 0, 0, 0}) luaunit.assert_is_number(plot._default) luaunit.assert_equals(plot._default, 0) luaunit.assert_is_number(plot._minimum) luaunit.assert_equals(plot._minimum, 0) luaunit.assert_is_number(plot._maximum) luaunit.assert_equals(plot._maximum, 1) end function TestOscillogram.test_tostring() local plot = Oscillogram:new("random", 5, 32, 23, 42) local text = tostring(plot) luaunit.assert_is_string(text) luaunit.assert_equals(text, "{" .. "__name = \"Oscillogram\"," .. "default = 32," .. "kind = \"random\"," .. "maximum = 42," .. "minimum = 23," .. "points = { 32, 32, 32, 32, 32 }" .. "}") end function TestOscillogram.test_update_custom() local plot = Oscillogram:new("custom", 0, 0.5) for i = 1, 5 do plot:push(i / 10) end local first_point = plot:update(0.2) luaunit.assert_is_table(plot._points) luaunit.assert_equals(plot._points, {0.2, 0.3, 0.4, 0.5, 0.2}) luaunit.assert_is_number(first_point) luaunit.assert_equals(first_point, 0.1) end function TestOscillogram.test_update_linear() local plot = Oscillogram:new("linear", 0, 0.5) for i = 1, 5 do plot:push(i / 10) end local first_point = plot:update(0.2) luaunit.assert_is_table(plot._points) luaunit.assert_equals(plot._points, {0.2, 0.3, 0.4, 0.5, 0.7}) luaunit.assert_is_number(first_point) luaunit.assert_equals(first_point, 0.1) end function TestOscillogram.test_update_random() math.randomseed(1) local plot = Oscillogram:new("random", 0, 0.5) for i = 1, 5 do plot:push(i / 10) end local first_point = plot:update(0.2) local last_point if _VERSION == "Lua 5.5" or _VERSION == "Lua 5.4" then last_point = 0.626235 elseif _VERSION == "Lua 5.3" or _VERSION == "Lua 5.2" then last_point = 0.457753 elseif _VERSION == "Lua 5.1" then if checks.is_table(jit) then -- check for LuaJIT last_point = 0.429524 else last_point = 0.636075 end end luaunit.assert_is_table(plot._points) luaunit.assert_equals(#plot._points, 5) luaunit.assert_almost_equals(plot._points[5], last_point, 1e-6) luaunit.assert_is_number(first_point) luaunit.assert_equals(first_point, 0.1) end