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