float.gno
3.14 Kb ยท 104 lines
1package expect
2
3import (
4 "strconv"
5
6 "gno.land/p/demo/ufmt"
7)
8
9// NewFloatChecker creates a new checker of float64 values.
10func NewFloatChecker(ctx Context, value float64) FloatChecker {
11 return FloatChecker{ctx, value}
12}
13
14// FloatChecker asserts float64 values.
15type FloatChecker struct {
16 ctx Context
17 value float64
18}
19
20// Not negates the next called expectation.
21func (c FloatChecker) Not() FloatChecker {
22 c.ctx.negated = !c.ctx.negated
23 return c
24}
25
26// ToEqual asserts that current value is equal to an expected value.
27func (c FloatChecker) ToEqual(value float64) {
28 c.ctx.T().Helper()
29 c.ctx.CheckExpectation(c.value == value, func(ctx Context) string {
30 got := formatFloat(c.value)
31 if !ctx.IsNegated() {
32 want := formatFloat(value)
33 return ufmt.Sprintf("Expected values to match\nGot: %s\nWant: %s", got, want)
34 }
35 return ufmt.Sprintf("Expected value to be different\nGot: %s", got)
36 })
37}
38
39// ToBeGreaterThan asserts that current value is greater than an expected value.
40func (c FloatChecker) ToBeGreaterThan(value float64) {
41 c.ctx.T().Helper()
42 c.ctx.CheckExpectation(c.value > value, func(ctx Context) string {
43 got := formatFloat(c.value)
44 want := formatFloat(value)
45 if !ctx.IsNegated() {
46 return ufmt.Sprintf("Expected values to be gerater than %s\nGot: %s", want, got)
47 }
48 return ufmt.Sprintf("Expected value to not to be greater than %s\nGot: %s", want, got)
49 })
50}
51
52// ToBeGreaterOrEqualThan asserts that current value is greater or equal than an expected value.
53func (c FloatChecker) ToBeGreaterOrEqualThan(value float64) {
54 c.ctx.T().Helper()
55 c.ctx.CheckExpectation(c.value >= value, func(ctx Context) string {
56 got := formatFloat(c.value)
57 want := formatFloat(value)
58 if !ctx.IsNegated() {
59 return ufmt.Sprintf("Expected values to be greater or equal than %s\nGot: %s", want, got)
60 }
61 return ufmt.Sprintf("Expected value to not to be greater or equal than %s\nGot: %s", want, got)
62 })
63}
64
65// ToBeLowerThan asserts that current value is lower than an expected value.
66func (c FloatChecker) ToBeLowerThan(value float64) {
67 c.ctx.T().Helper()
68 c.ctx.CheckExpectation(c.value < value, func(ctx Context) string {
69 got := formatFloat(c.value)
70 want := formatFloat(value)
71 if !ctx.IsNegated() {
72 return ufmt.Sprintf("Expected values to be lower than %s\nGot: %s", want, got)
73 }
74 return ufmt.Sprintf("Expected value to not to be lower than %s\nGot: %s", want, got)
75 })
76}
77
78// ToBeLowerOrEqualThan asserts that current value is lower or equal than an expected value.
79func (c FloatChecker) ToBeLowerOrEqualThan(value float64) {
80 c.ctx.T().Helper()
81 c.ctx.CheckExpectation(c.value <= value, func(ctx Context) string {
82 got := formatFloat(c.value)
83 want := formatFloat(value)
84 if !ctx.IsNegated() {
85 return ufmt.Sprintf("Expected values to be lower or equal than %s\nGot: %s", want, got)
86 }
87 return ufmt.Sprintf("Expected value to not to be lower or equal than %s\nGot: %s", want, got)
88 })
89}
90
91func formatFloat(value float64) string {
92 return strconv.FormatFloat(value, 'g', -1, 64)
93}
94
95func asFloat(value any) (float64, error) {
96 switch v := value.(type) {
97 case float32:
98 return float64(v), nil
99 case float64:
100 return v, nil
101 default:
102 return 0, ErrIncompatibleType
103 }
104}