summaryrefslogtreecommitdiff
path: root/spec/01-time_spec.lua
blob: 1607ccace1578bfebe051d9fdd07d73f2443f2ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
local system = require 'system.core'

describe('Test time functions', function()

  -- returns the new second, on the new second
  local function wait_for_second_rollover()
    local start_time = math.floor(os.time())
    local end_time = math.floor(os.time())
    while end_time == start_time do
      end_time = math.floor(os.time())
    end
    return end_time
  end


  describe("time()", function()

    it('returns current time', function()
      local expected_time = wait_for_second_rollover()
      local received_time = system.gettime()
      assert.is.near(expected_time, received_time, 0.02)

      wait_for_second_rollover()
      assert.is.near(1, system.gettime() - received_time, 0.02)
    end)

  end)



  describe("monotime()", function()

    it('returns monotonically increasing time', function()
      local starttime = system.monotime()
      local endtime = system.monotime()
      local delta = endtime - starttime
      assert.is_true(starttime > 0)
      assert.is_true(delta >= 0)
      assert.is_true(system.monotime() - endtime >= 0)
    end)

  end)



  describe("sleep()", function()

    it("should sleep for the specified time", function()
      local start_time = system.gettime()
      system.sleep(1, 1)
      local end_time = system.gettime()
      local elapsed_time = end_time - start_time
      assert.is.near(elapsed_time, 1, 0.2) -- large marging of error due to CI priorities
    end)


    it("should sleep for the specified time; fractional", function()
      local start_time = system.gettime()
      system.sleep(0.5, 1)
      local end_time = system.gettime()
      local elapsed_time = end_time - start_time
      assert.is.near(0.5, elapsed_time, 0.2) -- large marging of error due to CI priorities
    end)


    it("should return immediately for a non-positive sleep time", function()
      local start_time = system.gettime()
      system.sleep(-1)
      local end_time = system.gettime()
      local elapsed_time = end_time - start_time
      assert.is.near(elapsed_time, 0, 0.01)
    end)

  end)

end)