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