forked from radex/SwiftyTimer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.swift
More file actions
173 lines (144 loc) · 4.23 KB
/
main.swift
File metadata and controls
173 lines (144 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import Cocoa
let app = NSApplication.sharedApplication()
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
test()
}
func test() {
assert(1.second == 1.0)
assert(1.minute == 60.0)
assert(1.hour == 1.minute * 60)
assert(1.2.seconds == 1.2)
assert(1.5.minutes == 90.0)
assert(1.5.hours == 5400.0)
assert(1.3.milliseconds == 0.0013)
assert(0.5.day == 43_200 )
assert(1.day == 86_400 )
assert(2.days == 172_800)
test2()
}
func test2() {
var fired = false
NSTimer.after(0.1.seconds) {
assert(!fired)
fired = true
self.test3()
}
}
var timer1: NSTimer!
func test3() {
var fired = false
timer1 = NSTimer.every(0.1.seconds) {
if fired {
self.test4()
self.timer1.invalidate()
} else {
fired = true
}
}
}
let timer2 = NSTimer.new(after: 0.1.seconds) { fatalError() }
let timer3 = NSTimer.new(every: 0.1.seconds) { fatalError() }
func test4() {
let timer = NSTimer.new(after: 0.1.seconds) {
self.test5()
}
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
}
var timer4: NSTimer!
func test5() {
var fired = false
timer4 = NSTimer.new(every: 0.1.seconds) {
if fired {
self.timer4.invalidate()
self.test6()
} else {
fired = true
}
}
timer4.start()
}
func test6() {
let timer = NSTimer.new(after: 0.1.seconds) {
self.test7()
}
timer.start(runLoop: NSRunLoop.currentRunLoop(), modes: NSDefaultRunLoopMode, NSEventTrackingRunLoopMode)
}
func test7() {
NSTimer.after(0.1.seconds, test8)
}
// repeats with NSTimer passed in
func test8() {
var fires = 0
let timer = NSTimer.new(every: 0.1.seconds) { (timer: NSTimer) in
guard fires <= 1 else { fatalError("should be invalidated") }
defer { fires += 1 }
if fires == 1 {
timer.invalidate()
self.test9()
}
}
timer.start()
}
func test9() {
var fires = 0
NSTimer.every(0.1.seconds) { (timer: NSTimer) in
guard fires <= 1 else { fatalError("should be invalidated") }
defer { fires += 1 }
if fires == 1 {
timer.invalidate()
if #available(OSX 10.11, *) {
self.test10()
} else {
self.done()
}
}
}
}
// init() syntax
@available(OSX 10.11, *)
func test10() {
var fired = false
let timer = NSTimer(after: 0.1.seconds) {
guard !fired else { fatalError("should only be called once") }
defer { fired = true }
self.test11()
fired = true
}
timer.start()
}
@available(OSX 10.11, *)
func test11() {
var fires = 0
var timer: NSTimer!
timer = NSTimer(every: 0.1.seconds) {
guard fires <= 1 else { fatalError("should be invalidated") }
defer { fires += 1 }
if fires == 1 {
timer.invalidate()
self.test12()
}
}
timer.start()
}
@available(OSX 10.11, *)
func test12() {
var fires = 0
let timer = NSTimer(every: 0.1.seconds) { (timer: NSTimer) in
guard fires <= 1 else { fatalError("should be invalidated") }
defer { fires += 1 }
if fires == 1 {
timer.invalidate()
self.done()
}
}
timer.start()
}
func done() {
print("All tests passed")
app.terminate(self)
}
}
let delegate = AppDelegate()
app.delegate = delegate
app.run()