[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/thewizardplusplus/luaplot/master/plot_test.lua [Back]  [Original]

local luaunit = require("luaunit")
local checks = require("luatypechecks.checks")
local Plot = require("luaplot.plot")

-- luacheck: globals TestPlot
TestPlot = {}

function TestPlot.test_new_full()
  local plot = Plot:new(5, 32, 23, 42)

  luaunit.assert_is_table(plot)
  luaunit.assert_true(checks.is_instance(plot, Plot))

  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 TestPlot.test_new_partial()
  local plot = Plot:new(5)

  luaunit.assert_is_table(plot)
  luaunit.assert_true(checks.is_instance(plot, Plot))

  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 TestPlot.test_index_middle()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local point = plot[3]

  luaunit.assert_is_number(point)
  luaunit.assert_equals(point, 0.3)
end

function TestPlot.test_index_middle_fractional_increase()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local point = plot[3.2]

  luaunit.assert_is_number(point)
  luaunit.assert_equals(point, 0.32)
end

function TestPlot.test_index_middle_fractional_decrease()
  local plot = Plot:new(0, -0.5, -1, 0)
  for i = 1, 5 do
    plot:push(-i / 10)
  end

  local point = plot[3.2]

  luaunit.assert_is_number(point)
  luaunit.assert_equals(point, -0.32)
end

function TestPlot.test_index_start()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local point = plot[1]

  luaunit.assert_is_number(point)
  luaunit.assert_equals(point, 0.1)
end

function TestPlot.test_index_end()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local point = plot[5]

  luaunit.assert_is_number(point)
  luaunit.assert_equals(point, 0.5)
end

function TestPlot.test_index_after_end()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local result = plot[6]

  luaunit.assert_is_nil(result)
end

function TestPlot.test_index_after_end_fractional_increase()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local result = plot[5.2]

  luaunit.assert_is_nil(result)
end

function TestPlot.test_index_after_end_fractional_decrease()
  local plot = Plot:new(0, -0.5, -1, 0)
  for i = 1, 5 do
    plot:push(-i / 10)
  end

  local result = plot[5.2]

  luaunit.assert_is_nil(result)
end

function TestPlot.test_ipairs_function()
  if _VERSION == "Lua 5.1" then
    local message =
      "Lua 5.1 doesn't support for customizing the `ipairs()` function"
    luaunit.skip(message)
  end

  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local points = {}
  for index, point in ipairs(plot) do
    table.insert(points, {index = index, point = point})
  end

  luaunit.assert_equals(points, {
    {index = 1, point = 0.1},
    {index = 2, point = 0.2},
    {index = 3, point = 0.3},
    {index = 4, point = 0.4},
    {index = 5, point = 0.5},
  })
end

function TestPlot.test_ipairs_function_empty()
  if _VERSION == "Lua 5.1" then
    local message =
      "Lua 5.1 doesn't support for customizing the `ipairs()` function"
    luaunit.skip(message)
  end

  local plot = Plot:new(0, 0.5)

  local points = {}
  for index, point in ipairs(plot) do
    table.insert(points, {index = index, point = point})
  end

  luaunit.assert_equals(points, {})
end

function TestPlot.test_ipairs_metamethod()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local points = {}
  for index, point in plot:__ipairs() do
    table.insert(points, {index = index, point = point})
  end

  luaunit.assert_equals(points, {
    {index = 1, point = 0.1},
    {index = 2, point = 0.2},
    {index = 3, point = 0.3},
    {index = 4, point = 0.4},
    {index = 5, point = 0.5},
  })
end

function TestPlot.test_ipairs_metamethod_empty()
  local plot = Plot:new(0, 0.5)

  local points = {}
  for index, point in plot:__ipairs() do
    table.insert(points, {index = index, point = point})
  end

  luaunit.assert_equals(points, {})
end

function TestPlot.test_tostring()
  local plot = Plot:new(5, 32, 23, 42)
  local text = tostring(plot)

  luaunit.assert_is_string(text)
  luaunit.assert_equals(text, "{" ..
    "__name = \"Plot\"," ..
    "default = 32," ..
    "maximum = 42," ..
    "minimum = 23," ..
    "points = { 32, 32, 32, 32, 32 }" ..
  "}")
end

function TestPlot.test_push_in_range()
  local plot = Plot:new(5, 0.5)
  plot:push(0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 0.2})
end

function TestPlot.test_push_too_less()
  local plot = Plot:new(5, 0.5)
  plot:push(-0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 0})
end

function TestPlot.test_push_too_greater()
  local plot = Plot:new(5, 0.5)
  plot:push(1.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 1})
end

function TestPlot.test_push_empty()
  local plot = Plot:new(0, 0.5)
  plot:push(0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.2})
end

function TestPlot.test_push_with_factor_in_range_positive()
  local plot = Plot:new(5, 0.5)
  plot:push_with_factor(0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 0.7})
end

function TestPlot.test_push_with_factor_in_range_negative()
  local plot = Plot:new(5, 0.5)
  plot:push_with_factor(-0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 0.3})
end

function TestPlot.test_push_with_factor_out_range()
  local plot = Plot:new(5, 0.5)
  plot:push_with_factor(0.6)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.5, 0.5, 0.5, 0.5, 0.5, 1})
end

function TestPlot.test_push_with_factor_empty()
  local plot = Plot:new(0, 0.5)
  plot:push_with_factor(0.2)

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.7})
end

function TestPlot.test_push_with_random_factor()
  math.randomseed(1)

  local plot = Plot:new(5, 0.5)
  plot:push_with_random_factor(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, 6)
  luaunit.assert_almost_equals(plot._points[6], last_point, 1e-6)
end

function TestPlot.test_shift()
  local plot = Plot:new(0, 0.5)
  for i = 1, 5 do
    plot:push(i / 10)
  end

  local first_point = plot:shift()

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {0.2, 0.3, 0.4, 0.5})

  luaunit.assert_is_number(first_point)
  luaunit.assert_equals(first_point, 0.1)
end

function TestPlot.test_shift_empty()
  local plot = Plot:new(0, 0.5)
  local first_point = plot:shift()

  luaunit.assert_is_table(plot._points)
  luaunit.assert_equals(plot._points, {})

  luaunit.assert_is_number(first_point)
  luaunit.assert_equals(first_point, 0.5)
end

Web Proxy Viewer  |  New URL  |  Original Page