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  }