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>
This commit is contained in:
Joe Tsai 2024-10-11 13:12:18 -07:00 committed by GitHub
parent f07ff47922
commit ecc8035f73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 0 deletions

17
types/bools/compare.go Normal file
View File

@ -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
}
}

View File

@ -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)
}
}