-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathoperators_arithmatic.js
273 lines (236 loc) · 9.46 KB
/
operators_arithmatic.js
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
console.assertEqual(0 + 0, 0);
console.assertEqual(0 + 3, 3);
console.assertEqual(0 + (-3), -3);
console.assertEqual(0 + Infinity, Infinity);
console.assertEqual(0 + (-Infinity), -Infinity);
console.assertEqual(0 + NaN, NaN);
console.assertEqual(5 + 0, 5);
console.assertEqual(5 + 3, 8);
console.assertEqual(5 + (-3), 2);
console.assertEqual(5 + Infinity, Infinity);
console.assertEqual(5 + (-Infinity), -Infinity);
console.assertEqual(5 + NaN, NaN);
console.assertEqual((-5) + 0, -5);
console.assertEqual((-5) + 3, -2);
console.assertEqual((-5) + (-3), -8);
console.assertEqual((-5) + Infinity, Infinity);
console.assertEqual((-5) + (-Infinity), -Infinity);
console.assertEqual((-5) + NaN, NaN);
console.assertEqual(Infinity + 0, Infinity);
console.assertEqual(Infinity + 3, Infinity);
console.assertEqual(Infinity + (-3), Infinity);
console.assertEqual(Infinity + Infinity, Infinity);
console.assertEqual(Infinity + (-Infinity), NaN);
console.assertEqual(Infinity + NaN, NaN);
console.assertEqual((-Infinity) + 0, -Infinity);
console.assertEqual((-Infinity) + 3, -Infinity);
console.assertEqual((-Infinity) + (-3), -Infinity);
console.assertEqual((-Infinity) + Infinity, NaN);
console.assertEqual((-Infinity) + (-Infinity), -Infinity);
console.assertEqual((-Infinity) + NaN, NaN);
console.assertEqual(NaN + 0, NaN);
console.assertEqual(NaN + 3, NaN);
console.assertEqual(NaN + (-3), NaN);
console.assertEqual(NaN + Infinity, NaN);
console.assertEqual(NaN + (-Infinity), NaN);
console.assertEqual(NaN + NaN, NaN);
console.assertEqual(0 - 0, 0);
console.assertEqual(0 - 3, -3);
console.assertEqual(0 - (-3), 3);
console.assertEqual(0 - Infinity, -Infinity);
console.assertEqual(0 - (-Infinity), Infinity);
console.assertEqual(0 - NaN, NaN);
console.assertEqual(5 - 0, 5);
console.assertEqual(5 - 3, 2);
console.assertEqual(5 - (-3), 8);
console.assertEqual(5 - Infinity, -Infinity);
console.assertEqual(5 - (-Infinity), Infinity);
console.assertEqual(5 - NaN, NaN);
console.assertEqual((-5) - 0, -5);
console.assertEqual((-5) - 3, -8);
console.assertEqual((-5) - (-3), -2);
console.assertEqual((-5) - Infinity, -Infinity);
console.assertEqual((-5) - (-Infinity), Infinity);
console.assertEqual((-5) - NaN, NaN);
console.assertEqual(Infinity - 0, Infinity);
console.assertEqual(Infinity - 3, Infinity);
console.assertEqual(Infinity - (-3), Infinity);
console.assertEqual(Infinity - Infinity, NaN);
console.assertEqual(Infinity - (-Infinity), Infinity);
console.assertEqual(Infinity - NaN, NaN);
console.assertEqual((-Infinity) - 0, -Infinity);
console.assertEqual((-Infinity) - 3, -Infinity);
console.assertEqual((-Infinity) - (-3), -Infinity);
console.assertEqual((-Infinity) - Infinity, -Infinity);
console.assertEqual((-Infinity) - (-Infinity), NaN);
console.assertEqual((-Infinity) - NaN, NaN);
console.assertEqual(NaN - 0, NaN);
console.assertEqual(NaN - 3, NaN);
console.assertEqual(NaN - (-3), NaN);
console.assertEqual(NaN - Infinity, NaN);
console.assertEqual(NaN - (-Infinity), NaN);
console.assertEqual(NaN - NaN, NaN);
console.assertEqual(0 * 0, 0);
console.assertEqual(0 * 3, 0);
console.assertEqual(0 * (-3), 0);
console.assertEqual(0 * Infinity, NaN);
console.assertEqual(0 * (-Infinity), NaN);
console.assertEqual(0 * NaN, NaN);
console.assertEqual(5 * 0, 0);
console.assertEqual(5 * 3, 15);
console.assertEqual(5 * (-3), -15);
console.assertEqual(5 * Infinity, Infinity);
console.assertEqual(5 * (-Infinity), -Infinity);
console.assertEqual(5 * NaN, NaN);
console.assertEqual((-5) * 0, 0);
console.assertEqual((-5) * 3, -15);
console.assertEqual((-5) * (-3), 15);
console.assertEqual((-5) * Infinity, -Infinity);
console.assertEqual((-5) * (-Infinity), Infinity);
console.assertEqual((-5) * NaN, NaN);
console.assertEqual(Infinity * 0, NaN);
console.assertEqual(Infinity * 3, Infinity);
console.assertEqual(Infinity * (-3), -Infinity);
console.assertEqual(Infinity * Infinity, Infinity);
console.assertEqual(Infinity * (-Infinity), -Infinity);
console.assertEqual(Infinity * NaN, NaN);
console.assertEqual((-Infinity) * 0, NaN);
console.assertEqual((-Infinity) * 3, -Infinity);
console.assertEqual((-Infinity) * (-3), Infinity);
console.assertEqual((-Infinity) * Infinity, -Infinity);
console.assertEqual((-Infinity) * (-Infinity), Infinity);
console.assertEqual((-Infinity) * NaN, NaN);
console.assertEqual(NaN * 0, NaN);
console.assertEqual(NaN * 3, NaN);
console.assertEqual(NaN * (-3), NaN);
console.assertEqual(NaN * Infinity, NaN);
console.assertEqual(NaN * (-Infinity), NaN);
console.assertEqual(NaN * NaN, NaN);
console.assertEqual(0 / 0, NaN);
console.assertEqual(0 / 3, 0);
console.assertEqual(0 / (-3), 0);
console.assertEqual(0 / Infinity, 0);
console.assertEqual(0 / (-Infinity), 0);
console.assertEqual(0 / NaN, NaN);
console.assertEqual(15 / 0, Infinity);
console.assertEqual(15 / 3, 5);
console.assertEqual(15 / (-3), -5);
console.assertEqual(15 / Infinity, 0);
console.assertEqual(15 / (-Infinity), 0);
console.assertEqual(15 / NaN, NaN);
console.assertEqual((-15) / 0, -Infinity);
console.assertEqual((-15) / 3, -5);
console.assertEqual((-15) / (-3), 5);
console.assertEqual((-15) / Infinity, 0);
console.assertEqual((-15) / (-Infinity), 0);
console.assertEqual((-15) / NaN, NaN);
console.assertEqual(Infinity / 0, Infinity);
console.assertEqual(Infinity / 3, Infinity);
console.assertEqual(Infinity / (-3), -Infinity);
console.assertEqual(Infinity / Infinity, NaN);
console.assertEqual(Infinity / (-Infinity), NaN);
console.assertEqual(Infinity / NaN, NaN);
console.assertEqual((-Infinity) / 0, -Infinity);
console.assertEqual((-Infinity) / 3, -Infinity);
console.assertEqual((-Infinity) / (-3), Infinity);
console.assertEqual((-Infinity) / Infinity, NaN);
console.assertEqual((-Infinity) / (-Infinity), NaN);
console.assertEqual((-Infinity) / NaN, NaN);
console.assertEqual(NaN / 0, NaN);
console.assertEqual(NaN / 3, NaN);
console.assertEqual(NaN / (-3), NaN);
console.assertEqual(NaN / Infinity, NaN);
console.assertEqual(NaN / (-Infinity), NaN);
console.assertEqual(NaN / NaN, NaN);
console.assertEqual(0 % 0, NaN);
console.assertEqual(0 % 7, 0);
console.assertEqual(0 % (-7), 0);
console.assertEqual(0 % Infinity, 0);
console.assertEqual(0 % (-Infinity), 0);
console.assertEqual(0 % NaN, NaN);
console.assertEqual(20 % 0, NaN);
console.assertEqual(20 % 7, 6);
console.assertEqual(20 % (-7), 6);
console.assertEqual(20 % Infinity, 20);
console.assertEqual(20 % (-Infinity), 20);
console.assertEqual(20 % NaN, NaN);
console.assertEqual((-20) % 0, NaN);
console.assertEqual((-20) % 7, -6);
console.assertEqual((-20) % (-7), -6);
console.assertEqual((-20) % Infinity, -20);
console.assertEqual((-20) % (-Infinity), -20);
console.assertEqual((-20) % NaN, NaN);
console.assertEqual(Infinity % 0, NaN);
console.assertEqual(Infinity % 7, NaN);
console.assertEqual(Infinity % (-7), NaN);
console.assertEqual(Infinity % Infinity, NaN);
console.assertEqual(Infinity % (-Infinity), NaN);
console.assertEqual(Infinity % NaN, NaN);
console.assertEqual((-Infinity) % 0, NaN);
console.assertEqual((-Infinity) % 7, NaN);
console.assertEqual((-Infinity) % (-7), NaN);
console.assertEqual((-Infinity) % Infinity, NaN);
console.assertEqual((-Infinity) % (-Infinity), NaN);
console.assertEqual((-Infinity) % NaN, NaN);
console.assertEqual(NaN % 0, NaN);
console.assertEqual(NaN % 7, NaN);
console.assertEqual(NaN % (-7), NaN);
console.assertEqual(NaN % Infinity, NaN);
console.assertEqual(NaN % (-Infinity), NaN);
console.assertEqual(NaN % NaN, NaN);
console.assertEqual(0 ** 0, 1);
console.assertEqual(0 ** 3, 0);
console.assertEqual(0 ** (-3), Infinity);
console.assertEqual(0 ** Infinity, 0);
console.assertEqual(0 ** (-Infinity), Infinity);
console.assertEqual(0 ** NaN, NaN);
console.assertEqual(5 ** 0, 1);
console.assertEqual(5 ** 3, 125);
// TODO: Floating point.
//console.assertEqual(5 ** (-3), 0.008);
console.assertEqual(5 ** Infinity, Infinity);
console.assertEqual(5 ** (-Infinity), 0);
console.assertEqual(5 ** NaN, NaN);
console.assertEqual((-5) ** 0, 1);
console.assertEqual((-5) ** 3, -125);
// TODO: Floating point.
//console.assertEqual((-5) ** (-3), -0.008);
console.assertEqual((-5) ** Infinity, Infinity);
console.assertEqual((-5) ** (-Infinity), 0);
console.assertEqual((-5) ** NaN, NaN);
console.assertEqual(Infinity ** 0, 1);
console.assertEqual(Infinity ** 3, Infinity);
console.assertEqual(Infinity ** (-3), 0);
console.assertEqual(Infinity ** Infinity, Infinity);
console.assertEqual(Infinity ** (-Infinity), 0);
console.assertEqual(Infinity ** NaN, NaN);
console.assertEqual((-Infinity) ** 0, 1);
console.assertEqual((-Infinity) ** 3, -Infinity);
console.assertEqual((-Infinity) ** (-3), 0);
console.assertEqual((-Infinity) ** Infinity, Infinity);
console.assertEqual((-Infinity) ** (-Infinity), 0);
console.assertEqual((-Infinity) ** NaN, NaN);
console.assertEqual(NaN ** 0, 1);
console.assertEqual(NaN ** 3, NaN);
console.assertEqual(NaN ** (-3), NaN);
console.assertEqual(NaN ** Infinity, NaN);
console.assertEqual(NaN ** (-Infinity), NaN);
console.assertEqual(NaN ** NaN, NaN);
let counter = 0;
function assertFirst(n) {
console.assert(counter % 2 === 0);
counter += 1;
return n;
}
function assertSecond(n) {
console.assert(counter % 2 === 1);
counter += 1;
return n;
}
console.assertEqual(assertFirst(20) + assertSecond(10), 30);
console.assertEqual(assertFirst(20) - assertSecond(10), 10);
console.assertEqual(assertFirst(20) * assertSecond(10), 200);
console.assertEqual(assertFirst(20) / assertSecond(10), 2);
console.assertEqual(assertFirst(20) % assertSecond(7), 6);
console.assertEqual(assertSecond(20) ** assertFirst(3), 8000);
console.assertEqual(counter, 12);