diff --git a/types.go b/types.go index 4b9e24f..3c49c9b 100644 --- a/types.go +++ b/types.go @@ -113,11 +113,18 @@ func (n Number) Call(frame Frame, args ...Func) Func { // nolint func (n Number) Compare(other Func) (int, bool) { // nolint o, ok := other.(Number) - if !ok { + + switch { + case !ok: return -1, false - } - return int(n - o), true + case n < o: + return -1, true + case n > o: + return 1, true + default: + return 0, true + } } func (n Number) String() string { // nolint diff --git a/wdte_test.go b/wdte_test.go index 6a53b2e..a99a12a 100644 --- a/wdte_test.go +++ b/wdte_test.go @@ -190,6 +190,11 @@ func TestBasics(t *testing.T) { script: `let test => +; test 3 5;`, ret: wdte.Number(8), }, + { + name: "Simple/Number/Compare", + script: `[< .2 .5; < .6 .5; > .2 .5; > .6 .5];`, + ret: wdte.Array{wdte.Bool(true), wdte.Bool(false), wdte.Bool(false), wdte.Bool(true)}, + }, { name: "Simple/String/Compare", script: `[< 'a' 'b'; > 'a' 'b'];`,