summaryrefslogtreecommitdiff
path: root/Windows/spice/tests/regression/parser/xpressn-1.cir
blob: a680633cd3601b370e989d3a4d6b5a2f1092701c (plain)
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
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
* 'xpressn-1' check xpressn.c parser

* (exec-spice "ngspice -b %s")
* (tests-aux-renumber)

* ----------------------------------------
* arbitrary tests

v1001_t  n1001_t 0  '1+2'
v1002_t  n1002_t 0  '1 + 2 '
v1003_t  n1003_t 0  '1+2*3'
v1004_t  n1004_t 0  '(1?2:3)+100'
v1005_t  n1005_t 0  '(1>2?2*4:1+2*3)+100'

v1001_g  n1001_g 0  '3'
v1002_g  n1002_g 0  '3'
v1003_g  n1003_g 0  '7'
v1004_g  n1004_g 0  '102'
v1005_g  n1005_g 0  '107'


v1006_t  n1006_t 0  '1-2.1'
v1007_t  n1007_t 0  '1--1'
v1008_t  n1008_t 0  '5+2/-4'

v1006_g  n1006_g 0  '-1.1'
v1007_g  n1007_g 0  '2'
v1008_g  n1008_g 0  '4.5'


* ----------------------------------------
*  boolean operators '&&' '||' '!'
*   output: 0.0 or 1.0
*   input:  0.0 is 'false', everything else is 'true'

* ---------------
* `&&' operator

v1009_t  n1009_t 0  '0 && 0'
v1010_t  n1010_t 0  '0 && 1'
v1011_t  n1011_t 0  '1 && 0'
v1012_t  n1012_t 0  '0.1 && 0.2'
v1013_t  n1013_t 0  '-0.1 && 0.2'

v1009_g  n1009_g 0  '0'
v1010_g  n1010_g 0  '0'
v1011_g  n1011_g 0  '0'
v1012_g  n1012_g 0  '1'
v1013_g  n1013_g 0  '1'


* ---------------
* `||' operator

v1014_t  n1014_t 0  '0 || 0'
v1015_t  n1015_t 0  '0 || 0.1'
v1016_t  n1016_t 0  '-0.1 || 0'
v1017_t  n1017_t 0  '0.1 || -0.2'

v1014_g  n1014_g 0  '0'
v1015_g  n1015_g 0  '1'
v1016_g  n1016_g 0  '1'
v1017_g  n1017_g 0  '1'


* ---------------
*  `!' operator

v1018_t  n1018_t 0  '! 0.0'
v1019_t  n1019_t 0  '! 0.1'
v1020_t  n1020_t 0  '! (-0.1)'

v1018_g  n1018_g 0  '1'
v1019_g  n1019_g 0  '0'
v1020_g  n1020_g 0  '0'



* ----------------------------------------
* comparison operators
*   output: 0.0 or 1.0

* ----------
* `>'

v1021_t  n1021_t 0  '3 > 2'
v1022_t  n1022_t 0  '2 > 3'
v1023_t  n1023_t 0  '2 > 2'

v1021_g  n1021_g 0  '1'
v1022_g  n1022_g 0  '0'
v1023_g  n1023_g 0  '0'


* ----------
* '<'

v1024_t  n1024_t 0  '3 < 2'
v1025_t  n1025_t 0  '2 < 3'
v1026_t  n1026_t 0  '2 < 2'

v1024_g  n1024_g 0  '0'
v1025_g  n1025_g 0  '1'
v1026_g  n1026_g 0  '0'


* ----------
* '<='

v1027_t  n1027_t 0  '3 >= 2'
v1028_t  n1028_t 0  '2 >= 3'
v1029_t  n1029_t 0  '2 >= 2'

v1027_g  n1027_g 0  '1'
v1028_g  n1028_g 0  '0'
v1029_g  n1029_g 0  '1'


* ----------
* '>='

v1030_t  n1030_t 0  '3 <= 2'
v1031_t  n1031_t 0  '2 <= 3'
v1032_t  n1032_t 0  '2 <= 2'

v1030_g  n1030_g 0  '0'
v1031_g  n1031_g 0  '1'
v1032_g  n1032_g 0  '1'


* ----------
* '=='

v1033_t  n1033_t 0  '3 == 2'
v1034_t  n1034_t 0  '2 == 3'
v1035_t  n1035_t 0  '2 == 2'

v1033_g  n1033_g 0  '0'
v1034_g  n1034_g 0  '0'
v1035_g  n1035_g 0  '1'


* ----------
*  '!='

v1036_t  n1036_t 0  '3 != 2'
v1037_t  n1037_t 0  '2 != 3'
v1038_t  n1038_t 0  '2 != 2'

v1036_g  n1036_g 0  '1'
v1037_g  n1037_g 0  '1'
v1038_g  n1038_g 0  '0'


* ----------------------------------------
*  four variants of exponentiation

v1039_t  n1039_t 0  '2 ^ 3'
v1039_g  n1039_g 0  '8'

v1040_t  n1040_t 0  '2 ** 3'
v1040_g  n1040_g 0  '8'

v1041_t  n1041_t 0  'pwr(2,3)'
v1041_g  n1041_g 0  '8'

v1042_t  n1042_t 0  'pow(2,3)'
v1042_g  n1042_g 0  '8'


* ----------------------------------------
* ternary 'c ? x : y' operator
*   input:  0.0 is false, everything else is true

v1043_t  n1043_t 0  ' 0.1 ? 42 : 43'
v1044_t  n1044_t 0  '-0.1 ? 42 : 43'
v1045_t  n1045_t 0  ' 0.0 ? 42 : 43'

v1043_g  n1043_g 0  '42'
v1044_g  n1044_g 0  '42'
v1045_g  n1045_g 0  '43'

* assoziativity

v1046_t  n1046_t 0  '1 ? 42 : 1 ? 41 : 40'
v1047_t  n1047_t 0  '1 ? 42 : 0 ? 41 : 40'
v1048_t  n1048_t 0  '0 ? 42 : 1 ? 41 : 40'
v1049_t  n1049_t 0  '0 ? 42 : 0 ? 41 : 40'

v1046_g  n1046_g 0  '42'
v1047_g  n1047_g 0  '42'
v1048_g  n1048_g 0  '41'
v1049_g  n1049_g 0  '40'

* --------------------
* regression tests
*   these failed in the past, due to incorrect transformations in inpcom.c

* was incorrectly transformed --> (3>2)||ternary_fcn((1<4),0.2,0.3)
v1050_t  n1050_t 0  '(3>2)||(1<4) ? 0.2 : 0.3'
v1050_g  n1050_g 0  '0.2'

* was incorrectly transformed --> controlled_exit()
v1051_t  n1051_t 0  '(3>2) ? (3+2)*((2>1)?1:1) : 42'
v1051_g  n1051_g 0  '5'

* was incorrectly transformed --> ternary_fcn((3>2),42,(2*2))3
v1052_t  n1052_t 0  '(3>2) ? 42 : (2*2)+3'
v1052_g  n1052_g 0  '42'


* ----------------------------------------
* functions

v1053_t  n1053_t 0  'sin(0.3)'
v1054_t  n1054_t 0  'cos(0.3)'
v1055_t  n1055_t 0  'tan(0.3)'
v1056_t  n1056_t 0  'asin(0.3)'
v1057_t  n1057_t 0  'acos(0.3)'
v1058_t  n1058_t 0  'atan(0.3)'
v1059_t  n1059_t 0  'arctan(0.3)'
v1060_t  n1060_t 0  'sinh(0.3)'
v1061_t  n1061_t 0  'cosh(0.3)'
v1062_t  n1062_t 0  'tanh(0.3)'
v1063_t  n1063_t 0  'asinh(0.3)'
v1064_t  n1064_t 0  'acosh(1.3)'
v1065_t  n1065_t 0  'atanh(0.3)'

v1053_g  n1053_g 0  '0.29552020666133955'
v1054_g  n1054_g 0  '0.955336489125606'
v1055_g  n1055_g 0  '0.30933624960962325'
v1056_g  n1056_g 0  '0.3046926540153975'
v1057_g  n1057_g 0  '1.266103672779499'
v1058_g  n1058_g 0  '0.29145679447786704'
v1059_g  n1059_g 0  '0.29145679447786704'
v1060_g  n1060_g 0  '0.3045202934471426'
v1061_g  n1061_g 0  '1.0453385141288605'
v1062_g  n1062_g 0  '0.2913126124515909'
v1063_g  n1063_g 0  '0.2956730475634223'
v1064_g  n1064_g 0  '0.7564329108569595'
v1065_g  n1065_g 0  '0.3095196042031116'

* ----------

v1066_t  n1066_t 0  'exp(2.0)'
v1067_t  n1067_t 0  'exp(-2.0)'

v1066_g  n1066_g 0  '7.38905609893065'
v1067_g  n1067_g 0  '0.1353352832366127'

* ----------

v1068_t  n1068_t 0  'log(2.0)'
v1069_t  n1069_t 0  'log(0.5)'

v1068_g  n1068_g 0  '0.6931471805599453'
v1069_g  n1069_g 0  '-0.6931471805599453'

v1070_t  n1070_t 0  'ln(2.0)'
v1071_t  n1071_t 0  'ln(0.5)'

v1070_g  n1070_g 0  '0.6931471805599453'
v1071_g  n1071_g 0  '-0.6931471805599453'

* ----------

v1072_t  n1072_t 0  'sqrt(2.0)'
v1072_g  n1072_g 0  '1.4142135623730951'

v1073_t  n1073_t 0  'sqr(2.0)'
v1073_g  n1073_g 0  '4.0'


* ----------------------------------------
* functions

v1074_t  n1074_t 0  'abs(2.0)'
v1075_t  n1075_t 0  'abs(-2.0)'

v1074_g  n1074_g 0  '2'
v1075_g  n1075_g 0  '2'


v1076_t  n1076_t 0  'sgn(2.0)'
v1077_t  n1077_t 0  'sgn(0.0)'
v1078_t  n1078_t 0  'sgn(-2.0)'

v1076_g  n1076_g 0  '1'
v1077_g  n1077_g 0  '0'
v1078_g  n1078_g 0  '-1'


v1079_t  n1079_t 0  'int(2.1)'
v1080_t  n1080_t 0  'int(1.9)'
v1081_t  n1081_t 0  'int(0)'
v1082_t  n1082_t 0  'int(-1.9)'
v1083_t  n1083_t 0  'int(-2.1)'

v1079_g  n1079_g 0  '2'
v1080_g  n1080_g 0  '1'
v1081_g  n1081_g 0  '0'
v1082_g  n1082_g 0  '-1'
v1083_g  n1083_g 0  '-2'


v1084_t  n1084_t 0  'nint(2.6)'
v1085_t  n1085_t 0  'nint(2.5)'
v1086_t  n1086_t 0  'nint(2.4)'
v1087_t  n1087_t 0  'nint(1.6)'
v1088_t  n1088_t 0  'nint(1.5)'
v1089_t  n1089_t 0  'nint(1.4)'
v1090_t  n1090_t 0  'nint(0.6)'
v1091_t  n1091_t 0  'nint(0.5)'
v1092_t  n1092_t 0  'nint(0.4)'
v1093_t  n1093_t 0  'nint(0)'
v1094_t  n1094_t 0  'nint(-0.4)'
v1095_t  n1095_t 0  'nint(-0.5)'
v1096_t  n1096_t 0  'nint(-0.6)'
v1097_t  n1097_t 0  'nint(-1.4)'
v1098_t  n1098_t 0  'nint(-1.5)'
v1099_t  n1099_t 0  'nint(-1.6)'
v1100_t  n1100_t 0  'nint(-2.4)'
v1101_t  n1101_t 0  'nint(-2.5)'
v1102_t  n1102_t 0  'nint(-2.6)'

v1084_g  n1084_g 0  '3'
v1085_g  n1085_g 0  '2'
v1086_g  n1086_g 0  '2'
v1087_g  n1087_g 0  '2'
v1088_g  n1088_g 0  '2'
v1089_g  n1089_g 0  '1'
v1090_g  n1090_g 0  '1'
v1091_g  n1091_g 0  '0'
v1092_g  n1092_g 0  '0'
v1093_g  n1093_g 0  '0'
v1094_g  n1094_g 0  '0'
v1095_g  n1095_g 0  '0'
v1096_g  n1096_g 0  '-1'
v1097_g  n1097_g 0  '-1'
v1098_g  n1098_g 0  '-2'
v1099_g  n1099_g 0  '-2'
v1100_g  n1100_g 0  '-2'
v1101_g  n1101_g 0  '-2'
v1102_g  n1102_g 0  '-3'


v1103_t  n1103_t 0  'floor(2.1)'
v1104_t  n1104_t 0  'floor(1.9)'
v1105_t  n1105_t 0  'floor(0)'
v1106_t  n1106_t 0  'floor(-1.9)'
v1107_t  n1107_t 0  'floor(-2.1)'

v1103_g  n1103_g 0  '2'
v1104_g  n1104_g 0  '1'
v1105_g  n1105_g 0  '0'
v1106_g  n1106_g 0  '-2'
v1107_g  n1107_g 0  '-3'


v1108_t  n1108_t 0  'ceil(2.1)'
v1109_t  n1109_t 0  'ceil(1.9)'
v1110_t  n1110_t 0  'ceil(0)'
v1111_t  n1111_t 0  'ceil(-1.9)'
v1112_t  n1112_t 0  'ceil(-2.1)'

v1108_g  n1108_g 0  '3'
v1109_g  n1109_g 0  '2'
v1110_g  n1110_g 0  '0'
v1111_g  n1111_g 0  '-1'
v1112_g  n1112_g 0  '-2'


* ----------------------------------------
* min(a,b) max(a,b)

v1113_t  n1113_t 0  'min(1.1, 2.1)'
v1114_t  n1114_t 0  'min(2.1, 1.1)'

v1113_g  n1113_g 0  '1.1'
v1114_g  n1114_g 0  '1.1'


v1115_t  n1115_t 0  'max(1.1, 2.1)'
v1116_t  n1116_t 0  'max(2.1, 1.1)'

v1115_g  n1115_g 0  '2.1'
v1116_g  n1116_g 0  '2.1'


* ----------------------------------------

.control

define mismatch(a,b,err) abs(a-b)>err

op

let total_count = 0
let fail_count = 0

let tests = 1001 + vector(116)

foreach n $&tests
  set n_test = "n{$n}_t"
  set n_gold = "n{$n}_g"
  if mismatch(v($n_test), v($n_gold), 1e-9)
    let v_test = v($n_test)
    let v_gold = v($n_gold)
    echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold"
    let fail_count = fail_count + 1
  end
  let total_count = total_count + 1
end

if fail_count > 0
  echo "ERROR: $&fail_count of $&total_count tests failed"
  quit 1
else
  echo "INFO: $&fail_count of $&total_count tests failed"
  quit 0
end

.endc

.end