types/bools: add Compare to compare boolean values (#13792)
The bools.Compare function compares boolean values by reporting -1, 0, +1 for ordering so that it can be easily used with slices.SortFunc. Updates #cleanup Updates tailscale/corp#11038 Signed-off-by: Joe Tsai <joetsai@digital-static.net>main
parent
f07ff47922
commit
ecc8035f73
@ -0,0 +1,17 @@ |
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Package bools contains the bools.Compare function.
|
||||
package bools |
||||
|
||||
// Compare compares two boolean values as if false is ordered before true.
|
||||
func Compare[T ~bool](x, y T) int { |
||||
switch { |
||||
case x == false && y == true: |
||||
return -1 |
||||
case x == true && y == false: |
||||
return +1 |
||||
default: |
||||
return 0 |
||||
} |
||||
} |
||||
@ -0,0 +1,21 @@ |
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
package bools |
||||
|
||||
import "testing" |
||||
|
||||
func TestCompare(t *testing.T) { |
||||
if got := Compare(false, false); got != 0 { |
||||
t.Errorf("Compare(false, false) = %v, want 0", got) |
||||
} |
||||
if got := Compare(false, true); got != -1 { |
||||
t.Errorf("Compare(false, true) = %v, want -1", got) |
||||
} |
||||
if got := Compare(true, false); got != +1 { |
||||
t.Errorf("Compare(true, false) = %v, want +1", got) |
||||
} |
||||
if got := Compare(true, true); got != 0 { |
||||
t.Errorf("Compare(true, true) = %v, want 0", got) |
||||
} |
||||
} |
||||
Loading…
Reference in new issue