1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-03-19 21:28:32 +02:00

64 lines
1.2 KiB
Go
Raw Normal View History

package base
import "github.com/MontFerret/ferret/pkg/runtime/core"
type CompareOperator int
const (
NotEqualOp CompareOperator = 0
EqualOp CompareOperator = 1
LessOp CompareOperator = 2
LessOrEqualOp CompareOperator = 3
GreaterOp CompareOperator = 4
GreaterOrEqualOp CompareOperator = 5
)
func (op CompareOperator) String() string {
switch op {
case NotEqualOp:
return "not equal to"
case EqualOp:
return "equal to"
case LessOp:
return "less than"
case LessOrEqualOp:
return "less than or equal to"
case GreaterOp:
return "greater than"
default:
return "greater than or equal to"
}
}
func (op CompareOperator) Compare(args []core.Value) (bool, error) {
err := core.ValidateArgs(args, 2, 3)
if err != nil {
return false, err
}
actual := args[0]
expected := args[1]
var result bool
switch op {
case NotEqualOp:
result = actual.Compare(expected) != 0
case EqualOp:
result = actual.Compare(expected) == 0
case LessOp:
result = actual.Compare(expected) == -1
case LessOrEqualOp:
c := actual.Compare(expected)
result = c == -1 || c == 0
case GreaterOp:
result = actual.Compare(expected) == 1
default:
c := actual.Compare(expected)
result = c == 1 || c == 0
}
return result, nil
}