1chai = require "chai"
2chai.use(require "chai-increasing")
3{assert,expect} = chai
4Bluebird = require "bluebird"
5
6now = require "../"
7
8getUptime = -> process.uptime() * 1e3
9
10describe "now", ->
11  it "reported time differs at most 1ms from a freshly reported uptime", ->
12    assert.isAtMost Math.abs(now()-getUptime()), 1
13
14  it "two subsequent calls return an increasing number", ->
15    assert.isBelow now(), now()
16
17  it "has less than 10 microseconds overhead", ->
18    assert.isBelow Math.abs(now() - now()), 0.010
19
20  it "can be called 1 million times in under 1 second (averaging under 1 microsecond per call)", ->
21    @timeout 1000
22    now() for [0...1e6]
23    undefined
24
25  it "for 10,000 numbers, number n is never bigger than number n-1", ->
26    stamps = (now() for [1...10000])
27    expect(stamps).to.be.increasing
28
29  it "shows that at least 0.2 ms has passed after a timeout of 1 ms", ->
30    earlier = now()
31    Bluebird.resolve().delay(1).then -> assert.isAbove (now()-earlier), 0.2
32
33  it "shows that at most 3 ms has passed after a timeout of 1 ms", ->
34    earlier = now()
35    Bluebird.resolve().delay(1).then -> assert.isBelow (now()-earlier), 3
36
37  it "shows that at least 190ms ms has passed after a timeout of 200ms", ->
38    earlier = now()
39    Bluebird.resolve().delay(200).then -> assert.isAbove (now()-earlier), 190
40
41  it "shows that at most 220 ms has passed after a timeout of 200ms", ->
42    earlier = now()
43    Bluebird.resolve().delay(200).then -> assert.isBelow (now()-earlier), 220
44