| // Copyright 2022 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. | |
| //go:build SELECT_USING_THIS_TAG | |
| package cfile | |
| import "testing" | |
| var funcInvoked bool | |
| //go:noinline | |
| func thisFunctionOnlyCalledFromSnapshotTest(n int) int { | |
| if funcInvoked { | |
| panic("bad") | |
| } | |
| funcInvoked = true | |
| // Contents here not especially important, just so long as we | |
| // have some statements. | |
| t := 0 | |
| for i := 0; i < n; i++ { | |
| for j := 0; j < i; j++ { | |
| t += i ^ j | |
| } | |
| } | |
| return t | |
| } | |
| // Tests runtime/coverage.snapshot() directly. Note that if | |
| // coverage is not enabled, the hook is designed to just return | |
| // zero. | |
| func TestCoverageSnapshotImpl(t *testing.T) { | |
| C1 := Snapshot() | |
| thisFunctionOnlyCalledFromSnapshotTest(15) | |
| C2 := Snapshot() | |
| cond := "C1 > C2" | |
| val := C1 > C2 | |
| if testing.CoverMode() != "" { | |
| cond = "C1 >= C2" | |
| val = C1 >= C2 | |
| } | |
| t.Logf("%f %f\n", C1, C2) | |
| if val { | |
| t.Errorf("erroneous snapshots, %s = true C1=%f C2=%f", | |
| cond, C1, C2) | |
| } | |
| } | |