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
use crate::Expected;
pub trait Equals<T> {
fn to(&self, expected: Expected<T>);
}
pub trait NotEquals<T> {
fn to(&self, expected: Expected<T>);
}
pub trait Greater<T> {
fn than(&self, expected: Expected<T>);
}
pub trait Less<T> {
fn than(&self, expected: Expected<T>);
}
pub trait LessOrEqual<T> {
fn to(&self, expected: Expected<T>);
}
pub trait GreaterOrEqual<T> {
fn to(&self, expected: Expected<T>);
}
pub trait Length {
fn is(&self, expected: Expected<usize>);
}
pub trait BooleanCheck {
fn is_true(&self);
fn is_false(&self);
}
pub trait OptionCheck {
fn is_none(&self);
fn is_some(&self);
}
pub trait Matches<T> {
fn to(&self, expected: Expected<T>);
}
pub trait Contains<T> {
fn contains(&self, expected: Expected<T>);
}
pub trait CollectionContains<T> {
// [A,B,C,A,D].contains([D,A,C]).in_any_order() = true
fn in_any_order(&self);
// [A,B,C,A,D].contains([B,C]).in_exact_order() = true
// [A,B,C,A,D].contains([B,D]).in_exact_order() = false
fn in_exact_order(&self);
// [A,B,C,A,D].contains([B,C]).in_exact_order() = true
// [A,B,C,A,D].contains([B,D]).in_exact_order() = true
fn just_in_order(&self);
}
pub trait CollectionNotContain<T> {
// [A,B,C,D,E].does_not_contain([A,B,C]).all() = false
// [A,B,C,D,E].does_not_contain([A,B,F]).all() = false
// [A,B,C,D,E].does_not_contain([F,G,J]).all() = true
fn all(&self);
// [A,B,C,D,E].does_not_contain([A,B,C]).at_least_one() = false
// [A,B,C,D,E].does_not_contain([A,B,F]).at_least_one() = true
// [A,B,C,D,E].does_not_contain([F,G,J]).at_least_one() = true
fn at_least_one(&self);
}
pub trait CollectionEqual<T> {
fn in_any_order(&self);
fn in_order(&self);
}
pub trait CollectionNotEqual<T> {
// [A,B,C,D].is_not_equal(A,B,C,D).in_any_order() = false
// [A,B,C,D].is_not_equal(D,C,B,A).in_any_order() = false
// [A,B,C,D].is_not_equal(B,B,C,D).in_any_order() = true
fn in_any_order(&self);
// [A,B,C,D].is_not_equal(A,B,C,D).in_order() = false
// [A,B,C,D].is_not_equal(D,C,B,A).in_order() = true
fn in_order(&self);
}