aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/math/infix.lux
blob: 75773a56dfea026d16825892221d088d39f7e6c6 (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
(.using
 [library
  [lux "*"
   ["_" test (.only Test)]
   [abstract
    [monad (.only do)]]
   [data
    ["[0]" bit ("[1]#[0]" equivalence)]]
   [math
    ["[0]" random]
    [number
     ["n" nat]
     ["f" frac]]]]]
 [\\library
  ["[0]" /]])

(def: .public test
  Test
  (<| (_.covering /._)
      (do random.monad
        [subject random.nat
         parameter random.nat
         extra random.nat
         angle random.safe_frac
         factor random.nat]
        (_.coverage [/.infix]
          (let [constant_values!
                (n.= subject
                     (/.infix subject))

                unary_functions!
                (f.= (f.sin angle)
                     (/.infix [f.sin angle]))

                binary_functions!
                (n.= (n.gcd parameter subject)
                     (/.infix [subject n.gcd parameter]))

                multiple_binary_functions!
                (n.= (n.* factor (n.gcd parameter subject))
                     (/.infix [subject n.gcd parameter n.* factor]))

                function_call!
                (n.= (n.gcd extra (n.* parameter subject))
                     (/.infix [(n.* parameter subject) n.gcd extra]))

                non_numeric!
                (bit#= (and (n.< parameter subject) (n.< extra parameter))
                       (/.infix [[subject n.< parameter] and [parameter n.< extra]]))]
            (and constant_values!
                 unary_functions!
                 binary_functions!
                 multiple_binary_functions!
                 function_call!
                 non_numeric!
                 ))))))