]> Cypherpunks.ru repositories - gostls13.git/blob - src/time/internal_test.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / time / internal_test.go
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 )