Quellcode durchsuchen

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 <[email protected]>
Joe Tsai vor 1 Jahr
Ursprung
Commit
ecc8035f73
2 geänderte Dateien mit 38 neuen und 0 gelöschten Zeilen
  1. 17 0
      types/bools/compare.go
  2. 21 0
      types/bools/compare_test.go

+ 17 - 0
types/bools/compare.go

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

+ 21 - 0
types/bools/compare_test.go

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