aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/data/number/i16.lux
blob: c90b17dc3505dfd907c30d61441e1dae3b876d6f (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
(.module:
  [lux #*
   ["_" test (#+ Test)]
   [data
    ["." name]
    ["%" text/format (#+ format)]]
   [abstract
    [monad (#+ do)]
    {[0 #test]
     [/
      ["$." equivalence]]}]
   [math
    ["r" random (#+ Random)]]]
  {1
   ["." /
    ["/#" // #_
     ["#." i64 (#+ Mask)]]]})

(def: #export i16
  (Random /.I16)
  (:: r.functor map /.i16 r.i64))

(def: mask
  Mask
  (//i64.or //i64.sign
            (//i64.mask 15)))

(def: #export test
  Test
  (<| (_.context (name.module (name-of /._)))
      (do {@ r.monad}
        [expected (:: @ map (|>> (//i64.and ..mask) (: I64)) r.i64)]
        ($_ _.and
            ($equivalence.spec /.equivalence ..i16)
            
            (_.test "Can convert between I64 and I16"
                    (let [actual (|> expected /.i16 /.i64)]
                      (:: //i64.equivalence = expected actual)))
            ))))