github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/int256/cmp.gno (about) 1 package int256 2 3 // Eq returns true if z == x 4 func (z *Int) Eq(x *Int) bool { 5 return (z.neg == x.neg) && z.abs.Eq(x.abs) 6 } 7 8 // Neq returns true if z != x 9 func (z *Int) Neq(x *Int) bool { 10 return !z.Eq(x) 11 } 12 13 // Cmp compares x and y and returns: 14 // 15 // -1 if x < y 16 // 0 if x == y 17 // +1 if x > y 18 func (z *Int) Cmp(x *Int) (r int) { 19 // x cmp y == x cmp y 20 // x cmp (-y) == x 21 // (-x) cmp y == y 22 // (-x) cmp (-y) == -(x cmp y) 23 switch { 24 case z == x: 25 // nothing to do 26 case z.neg == x.neg: 27 r = z.abs.Cmp(x.abs) 28 if z.neg { 29 r = -r 30 } 31 case z.neg: 32 r = -1 33 default: 34 r = 1 35 } 36 return 37 } 38 39 // IsZero returns true if z == 0 40 func (z *Int) IsZero() bool { 41 return z.abs.IsZero() 42 } 43 44 // IsNeg returns true if z < 0 45 func (z *Int) IsNeg() bool { 46 return z.neg 47 } 48 49 // Lt returns true if z < x 50 func (z *Int) Lt(x *Int) bool { 51 if z.neg { 52 if x.neg { 53 return z.abs.Gt(x.abs) 54 } else { 55 return true 56 } 57 } else { 58 if x.neg { 59 return false 60 } else { 61 return z.abs.Lt(x.abs) 62 } 63 } 64 } 65 66 // Gt returns true if z > x 67 func (z *Int) Gt(x *Int) bool { 68 if z.neg { 69 if x.neg { 70 return z.abs.Lt(x.abs) 71 } else { 72 return false 73 } 74 } else { 75 if x.neg { 76 return true 77 } else { 78 return z.abs.Gt(x.abs) 79 } 80 } 81 } 82 83 // Clone creates a new Int identical to z 84 func (z *Int) Clone() *Int { 85 return &Int{z.abs.Clone(), z.neg} 86 }