mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-15 15:31:58 +00:00
198 lines
9.6 KiB
YAML
198 lines
9.6 KiB
YAML
desc: Test basic time arithmetic
|
|
tests:
|
|
- def: rt1 = 1375147296.681
|
|
- def: rt2 = 1375147296.682
|
|
- def: rt3 = 1375147297.681
|
|
- def: rt4 = 2375147296.681
|
|
- def: rts = [rt1, rt2, rt3, rt4]
|
|
|
|
- def: t1 = r.epoch_time(rt1)
|
|
- def: t2 = r.epoch_time(rt2)
|
|
- def: t3 = r.epoch_time(rt3)
|
|
- def: t4 = r.epoch_time(rt4)
|
|
- def: ts = r.expr([t1, t2, t3, t4])
|
|
|
|
# We run into double precision with the first one
|
|
- rb: ((t2 - t1) * 1000).do{|x| (x > 0.99) & (x < 1.01)}
|
|
py: ((t2 - t1) * 1000).do(lambda x:(x > 0.99) & (x < 1.01))
|
|
js: t2.sub(t1).mul(1000).do(r.row.gt(0.99).and(r.row.lt(1.01)))
|
|
ot: true
|
|
- cd: t3 - t1
|
|
js: t3.sub(t1)
|
|
ot: 1
|
|
- cd: t4 - t1
|
|
js: t4.sub(t1)
|
|
ot: 1000000000
|
|
|
|
- rb: ((t1 - t2) * 1000).do{|x| (x < -0.99) & (x > -1.01)}
|
|
py: ((t1 - t2) * 1000).do(lambda x:(x < -0.99) & (x > -1.01))
|
|
js: t1.sub(t2).mul(1000).do(r.row.lt(-0.99).and(r.row.gt(-1.01)))
|
|
ot: true
|
|
- cd: t1 - t3
|
|
js: t1.sub(t3)
|
|
ot: -1
|
|
- cd: t1 - t4
|
|
js: t1.sub(t4)
|
|
ot: -1000000000
|
|
|
|
- rb: ts.map{|x| t1 + (x - t1)}.map{|x| x.to_epoch_time}
|
|
py: ts.map(lambda x:t1 + (x - t1)).map(lambda x:x.to_epoch_time())
|
|
js: ts.map(t1.add(r.row.sub(t1))).map(r.row.toEpochTime())
|
|
ot: ([rt1, rt2, rt3, rt4])
|
|
- rb: ts.map{|x| (t1 + x) - t1}.map{|x| x.to_epoch_time}
|
|
py: ts.map(lambda x:(t1 + x) - t1).map(lambda x:x.to_epoch_time())
|
|
js: ts.map(t1.add(r.row).sub(t1)).map(r.row.toEpochTime())
|
|
ot: err("ReqlQueryLogicError", "Expected type NUMBER but found PTYPE<TIME>.", [])
|
|
- rb: ts.map{|x| t1 - (t1 - x)}.map{|x| x.to_epoch_time}
|
|
py: ts.map(lambda x:t1 - (t1 - x)).map(lambda x:x.to_epoch_time())
|
|
js: ts.map(t1.sub(t1.sub(r.row))).map(r.row.toEpochTime())
|
|
ot: ([rt1, rt2, rt3, rt4])
|
|
|
|
- rb: ts.map{|x| ts.map{|y| [x < y, x <= y, x.eq(y), x.ne(y), x >= y, x > y]}}
|
|
py: ts.map(lambda x:ts.map(lambda y:[x < y, x <= y, x == y, x != y, x >= y, x > y]))
|
|
js: ts.map(function(x) { return ts.map(function(y) { return [x.lt(y), x.le(y), x.eq(y), x.ne(y), x.ge(y), x.gt(y)]; }); })
|
|
ot: ([[[false, true, true, false, true, false],
|
|
[true, true, false, true, false, false],
|
|
[true, true, false, true, false, false],
|
|
[true, true, false, true, false, false]],
|
|
[[false, false, false, true, true, true],
|
|
[false, true, true, false, true, false],
|
|
[true, true, false, true, false, false],
|
|
[true, true, false, true, false, false]],
|
|
[[false, false, false, true, true, true],
|
|
[false, false, false, true, true, true],
|
|
[false, true, true, false, true, false],
|
|
[true, true, false, true, false, false]],
|
|
[[false, false, false, true, true, true],
|
|
[false, false, false, true, true, true],
|
|
[false, false, false, true, true, true],
|
|
[false, true, true, false, true, false]]])
|
|
|
|
- def:
|
|
rb: datum_types = r([null, true, false, 1, "1", [1], {"1" => 1}, r.binary('')])
|
|
py: datum_types = r.expr([null, true, false, 1, "1", [1], {"1":1}, r.binary(b'')])
|
|
js: datum_types = r([null, true, false, 1, "1", [1], {"1":1}, r.binary(Buffer(0))])
|
|
|
|
# Test comparisons, from both directions (there was a problem where
|
|
# the directions had different behavior).
|
|
- rb: datum_types.map{|x| [[x, t1], [t1, x]].map{|xy| xy[0].do{|x| xy[1].do{|y| [x < y, x <= y, x.eq(y), x.ne(y), x >= y, x > y]}}}}
|
|
py: datum_types.map(lambda x:r.expr([[x, t1], [t1, x]]).map(lambda xy:xy[0].do(lambda x2:xy[1].do(lambda y:[x2 < y, x2 <= y, x2 == y, x2 != y, x2 >= y, x2 > y]))))
|
|
js: datum_types.map(function(x) { return r([[x, t1], [t1, x]]).map(function(xy) { return xy.nth(0).do(function(x) { return xy.nth(1).do(function(y) { return [x.lt(y), x.le(y), x.eq(y), x.ne(y), x.ge(y), x.gt(y)]; }); }); }); })
|
|
ot: ([[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[false, false, false, true, true, true],
|
|
[true, true, false, true, false, false]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]],
|
|
[[true, true, false, true, false, false],
|
|
[false, false, false, true, true, true]]])
|
|
|
|
- rb: ts.map{|a| ts.map{|b| ts.map{|c| b.during(a, c)}}}
|
|
py: ts.map(lambda a:ts.map(lambda b:ts.map(lambda c:b.during(a, c))))
|
|
js: ts.map(function(a) { return ts.map(function(b) { return ts.map(function(c) { return b.during(a, c); }); }); })
|
|
ot: ([[[false, true, true, true],
|
|
[false, false, true, true],
|
|
[false, false, false, true],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, true, true],
|
|
[false, false, false, true],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, true],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false]]])
|
|
|
|
- rb: ts.map{|a| ts.map{|b| ts.map{|c| b.during(a, c, :left_bound => :open)}}}
|
|
py: ts.map(lambda a:ts.map(lambda b:ts.map(lambda c:b.during(a, c, left_bound='open'))))
|
|
js: ts.map(function(a) { return ts.map(function(b) { return ts.map(function(c) { return b.during(a, c, {leftBound:'open'}); }); }); })
|
|
ot: ([[[false, false, false, false],
|
|
[false, false, true, true],
|
|
[false, false, false, true],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, true],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false]]])
|
|
|
|
- rb: ts.map{|a| ts.map{|b| ts.map{|c| b.during(a, c, :right_bound => :closed)}}}
|
|
py: ts.map(lambda a:ts.map(lambda b:ts.map(lambda c:b.during(a, c, right_bound='closed'))))
|
|
js: ts.map(function(a) { return ts.map(function(b) { return ts.map(function(c) { return b.during(a, c, {rightBound:'closed'}); }); }); })
|
|
ot: ([[[true, true, true, true],
|
|
[false, true, true, true],
|
|
[false, false, true, true],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, true, true, true],
|
|
[false, false, true, true],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, true, true],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, true]]])
|
|
|
|
- rb: ts.map{|a| ts.map{|b| ts.map{|c| b.during(a, c, :left_bound => :open, :right_bound => :closed)}}}
|
|
py: ts.map(lambda a:ts.map(lambda b:ts.map(lambda c:b.during(a, c, left_bound='open', right_bound='closed'))))
|
|
js: ts.map(function(a) { return ts.map(function(b) { return ts.map(function(c) { return b.during(a, c, {leftBound:'open', rightBound:'closed'}); }); }); })
|
|
ot: ([[[false, false, false, false],
|
|
[false, true, true, true],
|
|
[false, false, true, true],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, true, true],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, true]],
|
|
[[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false],
|
|
[false, false, false, false]]])
|
|
|
|
- rb: ts.map{|x| x.date + x.time_of_day}.map{|x| x.to_epoch_time}
|
|
py: ts.map(lambda x:x.date() + x.time_of_day()).map(lambda x:x.to_epoch_time())
|
|
js: ts.map(r.row.date().add(r.row.timeOfDay())).map(r.row.toEpochTime())
|
|
ot: rts
|
|
|
|
# Test time interaction with r.js
|
|
- rb: r.epoch_time(rt1).do(r.js("(function(data){return data})")).to_epoch_time()
|
|
py: r.epoch_time(rt1).do(r.js("(function(data){return data})")).to_epoch_time()
|
|
js: r.epoch_time(rt1).do(r.js("(function(data){return data})")).toEpochTime()
|
|
ot: rt1
|
|
|
|
- rb: r.do(r.js("new Date('2012-08-01')")).to_iso8601()
|
|
py: r.do(r.js("new Date('2012-08-01')")).to_iso8601()
|
|
js: r.do(r.js("new Date('2012-08-01')")).toISO8601()
|
|
ot: ("2012-08-01T00:00:00+00:00")
|
|
|
|
- rb: r.do(r.js("(function(x){doc = new Object(); doc.date = new Date('2012-08-01'); return doc;})"))["date"].to_iso8601()
|
|
py: r.do(r.js("(function(x){doc = new Object(); doc.date = new Date('2012-08-01'); return doc;})"))["date"].to_iso8601()
|
|
js: r.do(r.js("(function(x){doc = new Object(); doc.date = new Date('2012-08-01'); return doc;})"))("date").toISO8601()
|
|
ot: ("2012-08-01T00:00:00+00:00")
|