-
Notifications
You must be signed in to change notification settings - Fork 0
/
should.gleam
111 lines (95 loc) · 2.1 KB
/
should.gleam
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
106
107
108
109
110
111
import gleam/option.{type Option, None, Some}
import showtime/tests/meta.{type Meta}
pub type Assertion(t, e) {
Eq(a: t, b: t, meta: Option(Meta))
NotEq(a: t, b: t, meta: Option(Meta))
IsOk(a: Result(t, e), meta: Option(Meta))
IsError(a: Result(t, e), meta: Option(Meta))
Fail(meta: Option(Meta))
}
pub fn equal(a: t, b: t) {
evaluate(Eq(a, b, None))
}
pub fn equal_meta(a: t, b: t, meta: Meta) {
evaluate(Eq(a, b, Some(meta)))
}
pub fn not_equal(a: t, b: t) {
evaluate(NotEq(a, b, None))
}
pub fn not_equal_meta(a: t, b: t, meta: Meta) {
evaluate(NotEq(a, b, Some(meta)))
}
pub fn be_ok(a: Result(o, e)) {
evaluate(IsOk(a, None))
let assert Ok(value) = a
value
}
pub fn be_ok_meta(a: Result(o, e), meta: Meta) {
evaluate(IsOk(a, Some(meta)))
}
pub fn be_error(a: Result(o, e)) {
evaluate(IsError(a, None))
let assert Error(value) = a
value
}
pub fn be_error_meta(a: Result(o, e), meta: Meta) {
evaluate(IsError(a, Some(meta)))
}
pub fn fail() {
evaluate(Fail(None))
}
pub fn fail_meta(meta: Meta) {
evaluate(Fail(Some(meta)))
}
pub fn be_true(a: Bool) {
a
|> equal(True)
}
pub fn be_true_meta(a: Bool, meta: Meta) {
a
|> equal_meta(True, meta)
}
pub fn be_false(a: Bool) {
a
|> equal(False)
}
pub fn be_false_meta(a: Bool, meta: Meta) {
a
|> equal_meta(False, meta)
}
pub fn evaluate(assertion) -> Nil {
case assertion {
Eq(a, b, _meta) ->
case a == b {
True -> Ok(assertion)
False -> {
let assert Ok(_assertion) = Error(assertion)
}
}
NotEq(a, b, _meta) ->
case a != b {
True -> Ok(assertion)
False -> {
let assert Ok(_assertion) = Error(assertion)
}
}
IsOk(a, _meta) ->
case a {
Ok(_) -> Ok(assertion)
Error(_) -> {
let assert Ok(_assertion) = Error(assertion)
}
}
IsError(a, _meta) ->
case a {
Error(_) -> Ok(assertion)
Ok(_) -> {
let assert Ok(_assertion) = Error(assertion)
}
}
Fail(_meta) -> {
let assert Ok(_assertion) = Error(assertion)
}
}
Nil
}