github.com/mtsmfm/go/src@v0.0.0-20221020090648-44bdcb9f8fde/time/internal_test.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package time 6 7 func init() { 8 // Force US/Pacific for time zone tests. 9 ForceUSPacificForTesting() 10 } 11 12 func initTestingZone() { 13 // For hermeticity, use only tzinfo source from the test's GOROOT, 14 // not the system sources and not whatever GOROOT may happen to be 15 // set in the process's environment (if any). 16 // This test runs in GOROOT/src/time, so GOROOT is "../..", 17 // but it is theoretically possible 18 sources := []string{"../../lib/time/zoneinfo.zip"} 19 z, err := loadLocation("America/Los_Angeles", sources) 20 if err != nil { 21 panic("cannot load America/Los_Angeles for testing: " + err.Error() + "; you may want to use -tags=timetzdata") 22 } 23 z.name = "Local" 24 localLoc = *z 25 } 26 27 var origPlatformZoneSources []string = platformZoneSources 28 29 func disablePlatformSources() (undo func()) { 30 platformZoneSources = nil 31 return func() { 32 platformZoneSources = origPlatformZoneSources 33 } 34 } 35 36 var Interrupt = interrupt 37 var DaysIn = daysIn 38 39 func empty(arg any, seq uintptr) {} 40 41 // Test that a runtimeTimer with a period that would overflow when on 42 // expiration does not throw or cause other timers to hang. 43 // 44 // This test has to be in internal_test.go since it fiddles with 45 // unexported data structures. 46 func CheckRuntimeTimerPeriodOverflow() { 47 // We manually create a runtimeTimer with huge period, but that expires 48 // immediately. The public Timer interface would require waiting for 49 // the entire period before the first update. 50 r := &runtimeTimer{ 51 when: runtimeNano(), 52 period: 1<<63 - 1, 53 f: empty, 54 arg: nil, 55 } 56 startTimer(r) 57 defer stopTimer(r) 58 59 // If this test fails, we will either throw (when siftdownTimer detects 60 // bad when on update), or other timers will hang (if the timer in a 61 // heap is in a bad state). There is no reliable way to test this, but 62 // we wait on a short timer here as a smoke test (alternatively, timers 63 // in later tests may hang). 64 <-After(25 * Millisecond) 65 } 66 67 var ( 68 MinMonoTime = Time{wall: 1 << 63, ext: -1 << 63, loc: UTC} 69 MaxMonoTime = Time{wall: 1 << 63, ext: 1<<63 - 1, loc: UTC} 70 71 NotMonoNegativeTime = Time{wall: 0, ext: -1<<63 + 50} 72 )