blob: d6926631be680654a0216a18d11f67ccc5b35e15 [file] [log] [blame]
// 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)
}
}