diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:16:40 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:16:40 +0000 |
commit | 47ab3d4a42e9ab51c465c4322d2ec233f6324e6b (patch) | |
tree | a61a0ffd83f4a3def4b36e5c8e99630c559aa723 /src/time/internal_test.go | |
parent | Initial commit. (diff) | |
download | golang-1.18-upstream.tar.xz golang-1.18-upstream.zip |
Adding upstream version 1.18.10.upstream/1.18.10upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/time/internal_test.go')
-rw-r--r-- | src/time/internal_test.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/time/internal_test.go b/src/time/internal_test.go new file mode 100644 index 0000000..f0dddb7 --- /dev/null +++ b/src/time/internal_test.go @@ -0,0 +1,67 @@ +// Copyright 2011 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 time + +func init() { + // force US/Pacific for time zone tests + ForceUSPacificForTesting() +} + +func initTestingZone() { + z, err := loadLocation("America/Los_Angeles", zoneSources[len(zoneSources)-1:]) + if err != nil { + panic("cannot load America/Los_Angeles for testing: " + err.Error() + "; you may want to use -tags=timetzdata") + } + z.name = "Local" + localLoc = *z +} + +var OrigZoneSources = zoneSources + +func forceZipFileForTesting(zipOnly bool) { + zoneSources = make([]string, len(OrigZoneSources)) + copy(zoneSources, OrigZoneSources) + if zipOnly { + zoneSources = zoneSources[len(zoneSources)-1:] + } +} + +var Interrupt = interrupt +var DaysIn = daysIn + +func empty(arg any, seq uintptr) {} + +// Test that a runtimeTimer with a period that would overflow when on +// expiration does not throw or cause other timers to hang. +// +// This test has to be in internal_test.go since it fiddles with +// unexported data structures. +func CheckRuntimeTimerPeriodOverflow() { + // We manually create a runtimeTimer with huge period, but that expires + // immediately. The public Timer interface would require waiting for + // the entire period before the first update. + r := &runtimeTimer{ + when: runtimeNano(), + period: 1<<63 - 1, + f: empty, + arg: nil, + } + startTimer(r) + defer stopTimer(r) + + // If this test fails, we will either throw (when siftdownTimer detects + // bad when on update), or other timers will hang (if the timer in a + // heap is in a bad state). There is no reliable way to test this, but + // we wait on a short timer here as a smoke test (alternatively, timers + // in later tests may hang). + <-After(25 * Millisecond) +} + +var ( + MinMonoTime = Time{wall: 1 << 63, ext: -1 << 63, loc: UTC} + MaxMonoTime = Time{wall: 1 << 63, ext: 1<<63 - 1, loc: UTC} + + NotMonoNegativeTime = Time{wall: 0, ext: -1<<63 + 50} +) |