podman
100 строк · 2.5 Кб
1package govalidator
2
3import (
4"math"
5)
6
7// Abs returns absolute value of number
8func Abs(value float64) float64 {
9return math.Abs(value)
10}
11
12// Sign returns signum of number: 1 in case of value > 0, -1 in case of value < 0, 0 otherwise
13func Sign(value float64) float64 {
14if value > 0 {
15return 1
16} else if value < 0 {
17return -1
18} else {
19return 0
20}
21}
22
23// IsNegative returns true if value < 0
24func IsNegative(value float64) bool {
25return value < 0
26}
27
28// IsPositive returns true if value > 0
29func IsPositive(value float64) bool {
30return value > 0
31}
32
33// IsNonNegative returns true if value >= 0
34func IsNonNegative(value float64) bool {
35return value >= 0
36}
37
38// IsNonPositive returns true if value <= 0
39func IsNonPositive(value float64) bool {
40return value <= 0
41}
42
43// InRangeInt returns true if value lies between left and right border
44func InRangeInt(value, left, right interface{}) bool {
45value64, _ := ToInt(value)
46left64, _ := ToInt(left)
47right64, _ := ToInt(right)
48if left64 > right64 {
49left64, right64 = right64, left64
50}
51return value64 >= left64 && value64 <= right64
52}
53
54// InRangeFloat32 returns true if value lies between left and right border
55func InRangeFloat32(value, left, right float32) bool {
56if left > right {
57left, right = right, left
58}
59return value >= left && value <= right
60}
61
62// InRangeFloat64 returns true if value lies between left and right border
63func InRangeFloat64(value, left, right float64) bool {
64if left > right {
65left, right = right, left
66}
67return value >= left && value <= right
68}
69
70// InRange returns true if value lies between left and right border, generic type to handle int, float32, float64 and string.
71// All types must the same type.
72// False if value doesn't lie in range or if it incompatible or not comparable
73func InRange(value interface{}, left interface{}, right interface{}) bool {
74switch value.(type) {
75case int:
76intValue, _ := ToInt(value)
77intLeft, _ := ToInt(left)
78intRight, _ := ToInt(right)
79return InRangeInt(intValue, intLeft, intRight)
80case float32, float64:
81intValue, _ := ToFloat(value)
82intLeft, _ := ToFloat(left)
83intRight, _ := ToFloat(right)
84return InRangeFloat64(intValue, intLeft, intRight)
85case string:
86return value.(string) >= left.(string) && value.(string) <= right.(string)
87default:
88return false
89}
90}
91
92// IsWhole returns true if value is whole number
93func IsWhole(value float64) bool {
94return math.Remainder(value, 1) == 0
95}
96
97// IsNatural returns true if value is natural number (positive and whole)
98func IsNatural(value float64) bool {
99return IsWhole(value) && IsPositive(value)
100}
101