summaryrefslogtreecommitdiffstats
path: root/src/runtime/lockrank_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/runtime/lockrank_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/runtime/lockrank_test.go b/src/runtime/lockrank_test.go
new file mode 100644
index 0000000..4b2fc0e
--- /dev/null
+++ b/src/runtime/lockrank_test.go
@@ -0,0 +1,41 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime_test
+
+import (
+ . "runtime"
+ "testing"
+)
+
+// Check that the partial order in lockPartialOrder fits within the total order
+// determined by the order of the lockRank constants.
+func TestLockRankPartialOrder(t *testing.T) {
+ for r, list := range LockPartialOrder {
+ rank := LockRank(r)
+ for _, e := range list {
+ entry := LockRank(e)
+ if entry > rank {
+ t.Errorf("lockPartialOrder row %v entry %v is inconsistent with total lock ranking order", rank, entry)
+ }
+ }
+ }
+}
+
+// Verify that partial order lists are kept sorted. This is a purely cosemetic
+// check to make manual reviews simpler. It does not affect correctness, unlike
+// the above test.
+func TestLockRankPartialOrderSortedEntries(t *testing.T) {
+ for r, list := range LockPartialOrder {
+ rank := LockRank(r)
+ var prev LockRank
+ for _, e := range list {
+ entry := LockRank(e)
+ if entry <= prev {
+ t.Errorf("Partial order for rank %v out of order: %v <= %v in %v", rank, entry, prev, list)
+ }
+ prev = entry
+ }
+ }
+}