// 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() { // For hermeticity, use only tzinfo source from the test's GOROOT, // not the system sources and not whatever GOROOT may happen to be // set in the process's environment (if any). // This test runs in GOROOT/src/time, so GOROOT is "../..", // but it is theoretically possible sources := []string{"../../lib/time/zoneinfo.zip"} z, err := loadLocation("America/Los_Angeles", sources) 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 origPlatformZoneSources []string = platformZoneSources func disablePlatformSources() (undo func()) { platformZoneSources = nil return func() { platformZoneSources = origPlatformZoneSources } } 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} )