Blame specs/posix_time_spec.yaml

Packit 437b5e
specify posix.time:
Packit 437b5e
- before:
Packit 437b5e
    tm = require "posix.time"
Packit 437b5e
Packit 437b5e
    now = tm.time ()
Packit 437b5e
Packit 437b5e
- describe clock_getres:
Packit 437b5e
  - before:
Packit 437b5e
      clock_getres = tm.clock_getres
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      if clock_getres then
Packit 437b5e
        badargs.diagnose (clock_getres, "(int)")
Packit 437b5e
      end
Packit 437b5e
Packit 437b5e
  - it returns a PosixTimespec:
Packit 437b5e
      if clock_getres then
Packit 437b5e
        expect (prototype (clock_getres (tm.CLOCK_REALTIME))).
Packit 437b5e
          to_be "PosixTimespec"
Packit 437b5e
      end
Packit 437b5e
Packit 437b5e
- describe clock_gettime:
Packit 437b5e
  - before:
Packit 437b5e
      clock_gettime = tm.clock_gettime
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      if clock_gettime then
Packit 437b5e
        badargs.diagnose (clock_gettime, "(int)")
Packit 437b5e
      end
Packit 437b5e
Packit 437b5e
  - it returns a PosixTimespec:
Packit 437b5e
      if clock_getres then
Packit 437b5e
        expect (prototype (clock_gettime (tm.CLOCK_REALTIME))).
Packit 437b5e
          to_be "PosixTimespec"
Packit 437b5e
      end
Packit 437b5e
Packit 437b5e
- describe gmtime:
Packit 437b5e
  - before:
Packit 437b5e
      gmtime = tm.gmtime
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (gmtime, "(int)")
Packit 437b5e
Packit 437b5e
  - it returns a PosixTm:
Packit 437b5e
      expect (prototype (gmtime (now))).to_be "PosixTm"
Packit 437b5e
  - it fetches broken-down time values:
Packit 437b5e
      t = gmtime (now)
Packit 437b5e
      fields = {"tm_sec", "tm_min", "tm_hour", "tm_mday",
Packit 437b5e
                "tm_mon", "tm_year", "tm_wday", "tm_yday", "tm_isdst"}
Packit 437b5e
      expect (t).to_contain.a_permutation_of (fields)
Packit 437b5e
      for _, field in pairs (fields) do
Packit 437b5e
        expect (type (t[field])).to_be "number"
Packit 437b5e
        expect (t[field] >= 0).to_be (true)
Packit 437b5e
      end
Packit 437b5e
  - it returns a month in the range 0-11:
Packit 437b5e
      # A recent December afternoon in epoch seconds...
Packit 437b5e
      expect (gmtime (1418734089).tm_mon).to_be (11)
Packit 437b5e
      t = gmtime (now)
Packit 437b5e
      expect (t.tm_mon >= 0 and t.tm_mon < 12).to_be (true)
Packit 437b5e
  - it returns years since 1900:
Packit 437b5e
      expect (gmtime (now).tm_year < 1900).to_be (true)
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe localtime:
Packit 437b5e
  - before:
Packit 437b5e
      localtime = tm.localtime
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (localtime, "(int)")
Packit 437b5e
Packit 437b5e
  - it returns a PosixTm:
Packit 437b5e
      expect (prototype (localtime (now))).to_be "PosixTm"
Packit 437b5e
  - it fetches broken-down time values:
Packit 437b5e
      t = localtime (now)
Packit 437b5e
      fields = {"tm_sec", "tm_min", "tm_hour", "tm_mday",
Packit 437b5e
                "tm_mon", "tm_year", "tm_wday", "tm_yday", "tm_isdst"}
Packit 437b5e
      expect (t).to_contain.a_permutation_of (fields)
Packit 437b5e
      for _, field in pairs (fields) do
Packit 437b5e
        expect (type (t[field])).to_be "number"
Packit 437b5e
        expect (t[field] >= 0).to_be (true)
Packit 437b5e
      end
Packit 437b5e
  - it returns a month in the range 0-11:
Packit 437b5e
      # A recent December afternoon in epoch seconds...
Packit 437b5e
      expect (localtime (1418734089).tm_mon).to_be (11)
Packit 437b5e
      t = localtime (now)
Packit 437b5e
      expect (t.tm_mon >= 0 and t.tm_mon < 12).to_be (true)
Packit 437b5e
  - it returns years since 1900:
Packit 437b5e
      expect (localtime (now).tm_year < 1900).to_be (true)
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe mktime:
Packit 437b5e
  - before:
Packit 437b5e
      localtime, mktime, time = tm.localtime, tm.mktime, tm.time
Packit 437b5e
      epoch = time ()
Packit 437b5e
      t = localtime (epoch)
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (mktime, "(table)")
Packit 437b5e
Packit 437b5e
  - it returns an epoch time:
Packit 437b5e
      expect (prototype (mktime (t))).to_be "number"
Packit 437b5e
  - it is the inverse of localtime:
Packit 437b5e
      expect (mktime (t)).to_be (epoch)
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe nanosleep:
Packit 437b5e
  - before:
Packit 437b5e
      nanosleep, typeerrors = init (tm, "nanosleep")
Packit 437b5e
Packit 437b5e
  - context with bad arguments: |
Packit 437b5e
      badargs.diagnose (nanosleep, "(table)")
Packit 437b5e
Packit 437b5e
      examples {
Packit 437b5e
        ["context diagnosing timespec table fields"] = {
Packit 437b5e
          {
Packit 437b5e
            ["it diagnoses argument #1 tv_sec field type not int"] = function ()
Packit 437b5e
              expect (nanosleep {tv_sec = false}).
Packit 437b5e
                to_raise.any_of (typeerrors (1, "int", "tv_sec", "boolean"))
Packit 437b5e
            end
Packit 437b5e
          },
Packit 437b5e
          {
Packit 437b5e
            ["it diagnoses argument #1 tv_nsec field type not int"] = function ()
Packit 437b5e
              expect (nanosleep {tv_sec = -1, tv_nsec = false}).
Packit 437b5e
                to_raise.any_of (typeerrors (1, "int", "tv_nsec", "boolean"))
Packit 437b5e
            end
Packit 437b5e
          },
Packit 437b5e
          {
Packit 437b5e
            ["it diagnoses argument #1 spurious fields"] = function ()
Packit 437b5e
              expect (nanosleep {tv_sec = -1, tv_nsec = -1, bogus = false}).
Packit 437b5e
                to_raise.any_of (typeerrors (1, nil, "bogus"))
Packit 437b5e
            end
Packit 437b5e
          },
Packit 437b5e
        }
Packit 437b5e
      }
Packit 437b5e
Packit 437b5e
  - it returns an integer:
Packit 437b5e
     expect (nanosleep {tv_sec = 0, tv_nsec = 10}).to_be (0)
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe strftime:
Packit 437b5e
  - before:
Packit 437b5e
      strftime = tm.strftime
Packit 437b5e
Packit 437b5e
      t = {
Packit 437b5e
        tm_wday = 0, tm_isdst = 1, tm_sec = 2, tm_min = 3, tm_hour = 4,
Packit 437b5e
        tm_mday = 5, tm_mon = 6, tm_year = 7, tm_yday = 8
Packit 437b5e
      }
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (strftime, "(string, table)")
Packit 437b5e
Packit 437b5e
  - context with place-holders:
Packit 437b5e
    - it plugs tm_wday:
Packit 437b5e
        expect (strftime ("%w", t)).to_be "0"
Packit 437b5e
    - it plugs tm_sec:
Packit 437b5e
        expect (strftime ("%S", t)).to_be "02"
Packit 437b5e
    - it plugs tm_min:
Packit 437b5e
        expect (strftime ("%M", t)).to_be "03"
Packit 437b5e
    - it plugs tm_hour:
Packit 437b5e
        expect (strftime ("%H", t)).to_be "04"
Packit 437b5e
    - it plugs tm_mday:
Packit 437b5e
        expect (strftime ("%d", t)).to_be "05"
Packit 437b5e
    - it plugs tm_mon:
Packit 437b5e
        expect (strftime ("%m", t)).to_be "07"
Packit 437b5e
    - it plugs tm_year:
Packit 437b5e
        expect (strftime ("%y", t)).to_be "07"
Packit 437b5e
    - it plugs tm_yday:
Packit 437b5e
        expect (strftime ("%j", t)).to_be "009"
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe strptime:
Packit 437b5e
  - before:
Packit 437b5e
      strptime = tm.strptime
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (strptime, "(string, string)")
Packit 437b5e
Packit 437b5e
  - context with place-holders:
Packit 437b5e
    - before:
Packit 437b5e
        t, i = strptime ("Mon Jun  4 03:02:01 BST 1906 garbage",
Packit 437b5e
                         "%a %b %d %H:%M:%S BST %Y")
Packit 437b5e
    - it returns the first unconsumed character:
Packit 437b5e
        expect (i).to_be (29)
Packit 437b5e
    # tm_yday and tm_isdst are not set by strptime
Packit 437b5e
    - it scans into tm_wday:
Packit 437b5e
        expect (t.tm_wday).to_be (1)
Packit 437b5e
    - it scans into tm_sec:
Packit 437b5e
        expect (t.tm_sec).to_be (1)
Packit 437b5e
    - it scans into tm_min:
Packit 437b5e
        expect (t.tm_min).to_be (2)
Packit 437b5e
    - it scans into tm_hour:
Packit 437b5e
        expect (t.tm_hour).to_be (3)
Packit 437b5e
    - it scans into tm_mday:
Packit 437b5e
        expect (t.tm_mday).to_be (4)
Packit 437b5e
    - it scans into tm_mon:
Packit 437b5e
        expect (t.tm_mon).to_be (5)
Packit 437b5e
    - it scans into tm_year:
Packit 437b5e
        expect (t.tm_year).to_be (6)
Packit 437b5e
Packit 437b5e
Packit 437b5e
- describe time:
Packit 437b5e
  - before:
Packit 437b5e
      time = tm.time
Packit 437b5e
Packit 437b5e
  - context with bad arguments:
Packit 437b5e
      badargs.diagnose (time, "()")
Packit 437b5e
Packit 437b5e
  - it returns epoch seconds:
Packit 437b5e
      expect (type (time ())).to_be "number"
Packit 437b5e
      expect (time () > 0).to_be (true)