blob: 7900331b80eac117bb4a10d3ba5d3afa219579c5 (
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
101
102
103
104
105
|
(.require
[library
[lux (.except)
[abstract
[monad (.only do)]
[\\specification
["$[0]" equivalence]]
["[0]" enum
["[1]T" \\test]]
["[0]" codec
["[1]T" \\test]]
["[0]" order
["[1]T" \\test]]
["[0]" monoid
["[1]T" \\test]]]
[data
["[0]" bit (.use "[1]#[0]" equivalence)]]
[math
["[0]" random (.only Random)]
[number
["n" nat]
["i" int]]]
[test
["_" property (.only Test)]]]]
[\\library
["[0]" /]])
(def .public test
Test
(<| (_.covering /._)
(_.for [/.Duration])
(all _.and
(_.for [/.equivalence]
($equivalence.spec /.equivalence random.duration))
(_.for [/.order]
(orderT.spec /.order random.duration))
(_.for [/.enum]
(enumT.spec /.enum random.duration))
(_.for [/.monoid]
(monoidT.spec /.equivalence /.monoid random.duration))
(_.for [/.codec]
(codecT.spec /.equivalence /.codec random.duration))
(do random.monad
[duration random.duration]
(_.coverage [/.of_millis /.millis]
(|> duration /.millis /.of_millis (of /.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))
(of ! 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 (of /.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]
))
)))
)))
|