blob: c46204175f671a0b373ab46a02c33acc82fef727 (
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
(.require
[library
[lux (.except)
["_" test (.only Test)]
[abstract
[monad (.only do)]
[\\specification
["$[0]" equivalence]
["$[0]" order]
["$[0]" enum]
["$[0]" monoid]
["$[0]" codec]]]
[data
["[0]" bit (.use "[1]#[0]" equivalence)]]
[math
["[0]" random (.only Random)]
[number
["n" nat]
["i" int]]]]]
[\\library
["[0]" /]])
(def .public test
Test
(<| (_.covering /._)
(_.for [/.Duration])
(all _.and
(_.for [/.equivalence]
($equivalence.spec /.equivalence random.duration))
(_.for [/.order]
($order.spec /.order random.duration))
(_.for [/.enum]
($enum.spec /.enum random.duration))
(_.for [/.monoid]
($monoid.spec /.equivalence /.monoid random.duration))
(_.for [/.codec]
($codec.spec /.equivalence /.codec random.duration))
(do random.monad
[duration random.duration]
(_.coverage [/.of_millis /.millis]
(|> duration /.millis /.of_millis (at /.equivalence = duration))))
(do random.monad
[.let [(open "#[0]") /.equivalence]
expected random.duration
parameter random.duration]
(all _.and
(_.coverage [/.composite /.difference]
(|> expected (/.composite parameter) (/.difference parameter) (#= expected)))
(_.coverage [/.empty]
(|> expected (/.composite /.empty) (#= expected)))
(_.coverage [/.inverse]
(and (|> expected /.inverse /.inverse (#= expected))
(|> expected (/.composite (/.inverse expected)) (#= /.empty))))
(_.coverage [/.positive? /.negative? /.neutral?]
(or (bit#= (/.positive? expected)
(/.negative? (/.inverse expected)))
(bit#= (/.neutral? expected)
(/.neutral? (/.inverse expected)))))
))
(do random.monad
[.let [(open "#[0]") /.equivalence]
factor random.nat]
(_.coverage [/.up /.down]
(|> /.milli_second (/.up factor) (/.down factor) (#= /.milli_second))))
(do [! random.monad]
[.let [(open "#[0]") /.order
positive (|> random.duration
(random.only (|>> (#= /.empty) not))
(at ! each (function (_ duration)
(if (/.positive? duration)
duration
(/.inverse duration)))))]
sample positive
frame positive]
(`` (all _.and
(_.coverage [/.framed]
(let [sample' (/.framed frame sample)]
(and (#< frame sample')
(bit#= (#< frame sample)
(#= sample sample')))))
(_.coverage [/.ticks]
(i.= +1 (/.ticks sample sample)))
(_.coverage [/.milli_second]
(#= /.empty (at /.enum pred /.milli_second)))
(~~ (with_template [<factor> <big> <small>]
[(_.coverage [<big>]
(|> <big> (/.ticks <small>) (i.= <factor>)))]
[+1,000 /.second /.milli_second]
[+60 /.minute /.second]
[+60 /.hour /.minute]
[+24 /.day /.hour]
[+7 /.week /.day]
[+365 /.normal_year /.day]
[+366 /.leap_year /.day]
))
)))
)))
|