1#######################################################
2#
3# Test eval()
4#
5#######################################################
6
7body common control
8{
9      inputs => { "../../default.cf.sub" };
10      bundlesequence  => { default("$(this.promise_filename)") };
11      version => "1.0";
12}
13
14#######################################################
15
16bundle agent init
17{
18  vars:
19      "values[0]" string => "x";
20      "values[1]" string => "+ 200";
21      "values[2]" string => "200 + 100";
22      "values[3]" string => "200 - 100";
23      "values[4]" string => "- - -";
24      "values[5]" string => "2 - (3 - 1)";
25      "values[6]" string => "";
26      "values[7]" string => "3 / 0";
27      "values[8]" string => "3^3";
28      "values[9]" string => "(-1)^2";
29      "values[10]" string => "sin(20)";
30      "values[11]" string => "cos(20)";
31      "values[12]" string => "asin(0.2)";
32      "values[13]" string => "acos(0.2)";
33      "values[14]" string => "tan(20)";
34      "values[15]" string => "atan(0.2)";
35      "values[16]" string => "log(0.2)";
36      "values[17]" string => "ln2";
37      "values[18]" string => "ln10";
38      "values[19]" string => "20 % 3";
39      "values[20]" string => "sqrt(0.2)";
40      "values[21]" string => "ceil(3.5)";
41      "values[22]" string => "floor(3.4)";
42      "values[23]" string => "abs(-3.4)";
43      "values[24]" string => "-3.4 -3.4";
44      "values[25]" string => "-3.400000 -3.400001";
45      "values[26]" string => "pi";
46      "values[27]" string => "e";
47      "values[28]" string => "10 == 10";
48      "values[29]" string => "10 == 11";
49      "values[30]" string => "3**0";
50      "values[31]" string => "step(10)";
51      "values[32]" string => "step(-10)";
52      "values[33]" string => "100k";
53      "values[34]" string => "(200m - 100k) / (2t + 2t)";
54      "values[35]" string => "10 > 10";
55      "values[36]" string => "10 > 11";
56      "values[37]" string => "10 >= 10";
57      "values[38]" string => "10 >= 11";
58      "values[39]" string => "10 < 10";
59      "values[40]" string => "10 < 11";
60      "values[41]" string => "10 <= 10";
61      "values[42]" string => "10 <= 11";
62      "values[43]" -> { "CFE-2762" } string => "1 * .75";
63}
64
65
66#######################################################
67
68bundle agent test
69{
70  vars:
71      "indices" slist => getindices("init.values");
72
73      # convert the result to lowercase because some platforms use 'inf'
74      # and others 'Inf' and others... you don't wanna know
75      "eval[$(indices)]" string => string_downcase(eval("$(init.values[$(indices)])"));
76}
77
78
79#######################################################
80
81bundle agent check
82{
83  vars:
84      # note this test will be MUCH more accurate when we have sprintf and rounding
85      "verify[0]" string => '';
86      "verify[1]" string => '';
87      "verify[2]" string => '300.000000';
88      "verify[3]" string => '100.000000';
89      "verify[4]" string => '';
90      "verify[5]" string => '0.000000';
91      "verify[6]" string => '0.000000';
92      "verify[7]" string => 'inf';
93      "verify[8]" string => '27.000000';
94      "verify[9]" string => '1.000000';
95      "verify[10]" string => '0.912945';
96      "verify[11]" string => '0.408082';
97      "verify[12]" string => '0.201358';
98      "verify[13]" string => '1.369438';
99      "verify[14]" string => '2.237161';
100      "verify[15]" string => '0.197396';
101      "verify[16]" string => '-1.609438';
102      "verify[17]" string => '0.693147';
103      "verify[18]" string => '2.302585';
104      "verify[19]" string => '2.000000';
105      "verify[20]" string => '0.447214';
106      "verify[21]" string => '4.000000';
107      "verify[22]" string => '3.000000';
108      "verify[23]" string => '3.400000';
109      "verify[24]" string => '-6.800000';
110      "verify[25]" string => '-6.800001';
111      "verify[26]" string => '3.141593';
112      "verify[27]" string => '2.718282';
113      "verify[28]" string => '1.000000';
114      "verify[29]" string => '0.000000';
115      "verify[30]" string => '1.000000';
116      "verify[31]" string => '1.000000';
117      "verify[32]" string => '0.000000';
118      "verify[33]" string => '100000.000000';
119      "verify[34]" string => '0.000050';
120      "verify[35]" string => '0.000000';
121      "verify[36]" string => '0.000000';
122      "verify[37]" string => '1.000000';
123      "verify[38]" string => '0.000000';
124      "verify[39]" string => '0.000000';
125      "verify[40]" string => '1.000000';
126      "verify[41]" string => '1.000000';
127      "verify[42]" string => '1.000000';
128      "verify[43]" -> { "CFE-2762" } string => '0.750000';
129
130      "indices" slist => getindices("verify");
131
132  classes:
133      "ok_$(indices)" expression => strcmp("$(test.eval[$(indices)])", "$(verify[$(indices)])");
134      "not_ok_$(indices)" not => strcmp("$(test.eval[$(indices)])", "$(verify[$(indices)])");
135
136      "ok" and => { ok_0, ok_1, ok_3, ok_4, ok_5, ok_6, ok_7, ok_8,
137                   ok_9, ok_10, ok_11, ok_13, ok_14, ok_15, ok_16,
138                   ok_17, ok_18, ok_19, ok_20, ok_21, ok_23, ok_24,
139                   ok_25, ok_26, ok_27, ok_28, ok_29, ok_30, ok_31,
140                   ok_32, ok_33, ok_34, ok_35, ok_36, ok_37, ok_38,
141                   ok_39, ok_40, ok_41, ok_42, ok_43
142      };
143
144  reports:
145    DEBUG::
146      "OK math $(indices) eval('$(init.values[$(indices)])') = '$(test.eval[$(indices)])'"
147      if => "ok_$(indices)";
148
149      "FAIL math $(indices) eval('$(init.values[$(indices)])') = '$(test.eval[$(indices)])' (expected '$(verify[$(indices)])')"
150      if => "not_ok_$(indices)";
151
152    ok::
153      "$(this.promise_filename) Pass";
154    !ok::
155      "$(this.promise_filename) FAIL";
156}
157