github.com/onsi/gomega@v1.32.0/matchers/be_numerically_matcher_test.go (about) 1 package matchers_test 2 3 import ( 4 . "github.com/onsi/ginkgo/v2" 5 . "github.com/onsi/gomega" 6 . "github.com/onsi/gomega/matchers" 7 ) 8 9 var _ = Describe("BeNumerically", func() { 10 When("passed a number", func() { 11 It("should support ==", func() { 12 Expect(uint32(5)).Should(BeNumerically("==", 5)) 13 Expect(float64(5.0)).Should(BeNumerically("==", 5)) 14 Expect(int8(5)).Should(BeNumerically("==", 5)) 15 }) 16 17 It("should not have false positives", func() { 18 Expect(5.1).ShouldNot(BeNumerically("==", 5)) 19 Expect(5).ShouldNot(BeNumerically("==", 5.1)) 20 }) 21 22 It("should support >", func() { 23 Expect(uint32(5)).Should(BeNumerically(">", 4)) 24 Expect(float64(5.0)).Should(BeNumerically(">", 4.9)) 25 Expect(int8(5)).Should(BeNumerically(">", 4)) 26 27 Expect(uint32(5)).ShouldNot(BeNumerically(">", 5)) 28 Expect(float64(5.0)).ShouldNot(BeNumerically(">", 5.0)) 29 Expect(int8(5)).ShouldNot(BeNumerically(">", 5)) 30 }) 31 32 It("should support <", func() { 33 Expect(uint32(5)).Should(BeNumerically("<", 6)) 34 Expect(float64(5.0)).Should(BeNumerically("<", 5.1)) 35 Expect(int8(5)).Should(BeNumerically("<", 6)) 36 37 Expect(uint32(5)).ShouldNot(BeNumerically("<", 5)) 38 Expect(float64(5.0)).ShouldNot(BeNumerically("<", 5.0)) 39 Expect(int8(5)).ShouldNot(BeNumerically("<", 5)) 40 }) 41 42 It("should support >=", func() { 43 Expect(uint32(5)).Should(BeNumerically(">=", 4)) 44 Expect(float64(5.0)).Should(BeNumerically(">=", 4.9)) 45 Expect(int8(5)).Should(BeNumerically(">=", 4)) 46 47 Expect(uint32(5)).Should(BeNumerically(">=", 5)) 48 Expect(float64(5.0)).Should(BeNumerically(">=", 5.0)) 49 Expect(int8(5)).Should(BeNumerically(">=", 5)) 50 51 Expect(uint32(5)).ShouldNot(BeNumerically(">=", 6)) 52 Expect(float64(5.0)).ShouldNot(BeNumerically(">=", 5.1)) 53 Expect(int8(5)).ShouldNot(BeNumerically(">=", 6)) 54 }) 55 56 It("should support <=", func() { 57 Expect(uint32(5)).Should(BeNumerically("<=", 6)) 58 Expect(float64(5.0)).Should(BeNumerically("<=", 5.1)) 59 Expect(int8(5)).Should(BeNumerically("<=", 6)) 60 61 Expect(uint32(5)).Should(BeNumerically("<=", 5)) 62 Expect(float64(5.0)).Should(BeNumerically("<=", 5.0)) 63 Expect(int8(5)).Should(BeNumerically("<=", 5)) 64 65 Expect(uint32(5)).ShouldNot(BeNumerically("<=", 4)) 66 Expect(float64(5.0)).ShouldNot(BeNumerically("<=", 4.9)) 67 Expect(int8(5)).Should(BeNumerically("<=", 5)) 68 }) 69 70 When("passed ~", func() { 71 When("passed a float", func() { 72 Context("and there is no precision parameter", func() { 73 It("should default to 1e-8", func() { 74 Expect(5.00000001).Should(BeNumerically("~", 5.00000002)) 75 Expect(5.00000001).ShouldNot(BeNumerically("~", 5.0000001)) 76 }) 77 78 It("should show failure message", func() { 79 actual := BeNumerically("~", 4.98).FailureMessage(123) 80 expected := "Expected\n <int>: 123\nto be ~\n <float64>: 4.98" 81 Expect(actual).To(Equal(expected)) 82 }) 83 84 It("should show negated failure message", func() { 85 actual := BeNumerically("~", 4.98).NegatedFailureMessage(123) 86 expected := "Expected\n <int>: 123\nnot to be ~\n <float64>: 4.98" 87 Expect(actual).To(Equal(expected)) 88 }) 89 }) 90 91 Context("and there is a precision parameter", func() { 92 It("should use the precision parameter", func() { 93 Expect(5.1).Should(BeNumerically("~", 5.19, 0.1)) 94 Expect(5.1).Should(BeNumerically("~", 5.01, 0.1)) 95 Expect(5.1).ShouldNot(BeNumerically("~", 5.22, 0.1)) 96 Expect(5.1).ShouldNot(BeNumerically("~", 4.98, 0.1)) 97 }) 98 99 It("should show precision in failure message", func() { 100 actual := BeNumerically("~", 4.98, 0.1).FailureMessage(123) 101 expected := "Expected\n <int>: 123\nto be within 0.1 of ~\n <float64>: 4.98" 102 Expect(actual).To(Equal(expected)) 103 }) 104 105 It("should show precision in negated failure message", func() { 106 actual := BeNumerically("~", 4.98, 0.1).NegatedFailureMessage(123) 107 expected := "Expected\n <int>: 123\nnot to be within 0.1 of ~\n <float64>: 4.98" 108 Expect(actual).To(Equal(expected)) 109 }) 110 }) 111 }) 112 113 When("passed an int/uint", func() { 114 Context("and there is no precision parameter", func() { 115 It("should just do strict equality", func() { 116 Expect(5).Should(BeNumerically("~", 5)) 117 Expect(5).ShouldNot(BeNumerically("~", 6)) 118 Expect(uint(5)).ShouldNot(BeNumerically("~", 6)) 119 }) 120 }) 121 122 Context("and there is a precision parameter", func() { 123 It("should use precision paramter", func() { 124 Expect(5).Should(BeNumerically("~", 6, 2)) 125 Expect(5).ShouldNot(BeNumerically("~", 8, 2)) 126 Expect(uint(5)).Should(BeNumerically("~", 6, 1)) 127 }) 128 }) 129 }) 130 }) 131 }) 132 133 When("passed a non-number", func() { 134 It("should error", func() { 135 success, err := (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{5}}).Match("foo") 136 Expect(success).Should(BeFalse()) 137 Expect(err).Should(HaveOccurred()) 138 139 success, err = (&BeNumericallyMatcher{Comparator: "=="}).Match(5) 140 Expect(success).Should(BeFalse()) 141 Expect(err).Should(HaveOccurred()) 142 143 success, err = (&BeNumericallyMatcher{Comparator: "~", CompareTo: []interface{}{3.0, "foo"}}).Match(5.0) 144 Expect(success).Should(BeFalse()) 145 Expect(err).Should(HaveOccurred()) 146 Expect(err.Error()).Should(ContainSubstring("foo")) 147 148 success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match(5) 149 Expect(success).Should(BeFalse()) 150 Expect(err).Should(HaveOccurred()) 151 152 success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match("foo") 153 Expect(success).Should(BeFalse()) 154 Expect(err).Should(HaveOccurred()) 155 156 success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{nil}}).Match(0) 157 Expect(success).Should(BeFalse()) 158 Expect(err).Should(HaveOccurred()) 159 160 success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{0}}).Match(nil) 161 Expect(success).Should(BeFalse()) 162 Expect(err).Should(HaveOccurred()) 163 }) 164 }) 165 166 When("passed an unsupported comparator", func() { 167 It("should error", func() { 168 success, err := (&BeNumericallyMatcher{Comparator: "!=", CompareTo: []interface{}{5}}).Match(4) 169 Expect(success).Should(BeFalse()) 170 Expect(err).Should(HaveOccurred()) 171 }) 172 }) 173 })