From 6c1689f0c64c4580501c604970dded23d0de9572 Mon Sep 17 00:00:00 2001 From: Brian Brazil Date: Fri, 17 Apr 2015 15:49:17 +0100 Subject: [PATCH] Sort NaN as the lowest value. Currently it ends up in a random position. --- rules/ast/functions.go | 3 +++ rules/rules_test.go | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/rules/ast/functions.go b/rules/ast/functions.go index 5c7ae096a..7a559ea25 100644 --- a/rules/ast/functions.go +++ b/rules/ast/functions.go @@ -169,6 +169,9 @@ func (s vectorByValueHeap) Len() int { } func (s vectorByValueHeap) Less(i, j int) bool { + if math.IsNaN(float64(s[i].Value)) { + return true + } return s[i].Value < s[j].Value } diff --git a/rules/rules_test.go b/rules/rules_test.go index e19069d59..32749faa3 100644 --- a/rules/rules_test.go +++ b/rules/rules_test.go @@ -307,6 +307,19 @@ func TestExpressions(t *testing.T) { `http_requests{group="canary", instance="1", job="app-server"} => 800 @[%v]`, }, checkOrder: true, + }, { + expr: `sort(0 / round(http_requests, 400) + http_requests)`, + output: []string{ + `{group="production", instance="0", job="api-server"} => NaN @[%v]`, + `{group="production", instance="1", job="api-server"} => 200 @[%v]`, + `{group="canary", instance="0", job="api-server"} => 300 @[%v]`, + `{group="canary", instance="1", job="api-server"} => 400 @[%v]`, + `{group="production", instance="0", job="app-server"} => 500 @[%v]`, + `{group="production", instance="1", job="app-server"} => 600 @[%v]`, + `{group="canary", instance="0", job="app-server"} => 700 @[%v]`, + `{group="canary", instance="1", job="app-server"} => 800 @[%v]`, + }, + checkOrder: true, }, { expr: `sort_desc(http_requests)`, output: []string{