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
|
set test "ternary_op"
set testpath "$srcdir/$subdir"
if {! [installtest_p]} { untested "$test"; return }
# --- TEST 1 ---
set subtest1 "TEST 1: ternary operator should be tighter than ,"
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest1 ($runtime)"
set exit_code [run_cmd_2way "stap --runtime=$runtime '$srcdir/$subdir/${test}_1.stp'" out stderr]
set exp_out "positive 3
"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
# --- TEST 2 ---
set subtest2 "TEST 2: ternary operator should be tighter than = (bad case)"
set test_name "$test: $subtest2"
set exit_code [run_cmd_2way "stap '$srcdir/$subdir/${test}_2.stp'" out stderr]
set exp_out ""
is "${test_name}: stdout" $out $exp_out
isnt "${test_name}: exit code" $exit_code 0
set stderr_pat "^semantic error: Expecting lvalue for assignment: operator '=' at \[^\\n\]*?\\.stp:4:58
source: printf\\(\"a = %d, b = %d, c = %d\\\\n\", a > 0 \\? b = 4 : c = 5, b, c\\);
\\^
"
like "${test_name}: stderr" $stderr $stderr_pat "-linestop -lineanchor"
# --- TEST 3 ---
set subtest3 "TEST 3: ternary operator should be tighter than = (bad case, compatible 4.0)"
set test_name "$test: $subtest3"
set exit_code [run_cmd_2way "stap --compatible 4.0 '$srcdir/$subdir/${test}_2.stp'" out stderr]
set exp_out ""
is "${test_name}: stdout" $out $exp_out
isnt "${test_name}: exit code" $exit_code 0
set stderr_pat "^semantic error: Expecting lvalue for assignment: operator '=' at \[^\\n\]*?\\.stp:4:58
source: printf\\(\"a = %d, b = %d, c = %d\\\\n\", a > 0 \\? b = 4 : c = 5, b, c\\);
\\^
"
like "${test_name}: stderr" $stderr $stderr_pat "-linestop -lineanchor"
# --- TEST 4 ---
set subtest4 "TEST 4: ternary operator should be tighter than = (bad case, compatible 3.3)"
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest4 ($runtime)"
set exit_code [run_cmd_2way "stap --compatible 3.3 --runtime=$runtime '$srcdir/$subdir/${test}_2.stp'" out stderr]
set exp_out "a = 4, b = 4, c = 0
"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
# --- TEST 5 ---
set subtest5 "TEST 5: ternary operator should be tighter than = (bad case, compatible 3.2)"
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest5 ($runtime)"
set exit_code [run_cmd_2way "stap --compatible 3.2 --runtime=$runtime '$srcdir/$subdir/${test}_2.stp'" out stderr]
set exp_out "a = 4, b = 4, c = 0
"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
# --- TEST 6 ---
set subtest6 "TEST 6: ternary operator should be tighter than = (good case, with parens)"
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest6 ($runtime)"
set exit_code [run_cmd_2way "stap --runtime=$runtime '$srcdir/$subdir/${test}_6.stp'" out stderr]
set exp_out "3
"
is "${test_name}: stdout" $out $exp_out
set stderr_pat "^WARNING: Eliding assignment to 'b': operator '=' at \[^\\n\]*?\\.stp:3:30
.*?
WARNING: Eliding assignment to 'c': operator '=' at :3:39
"
like "${test_name}: stderr" $stderr $stderr_pat "-lineanchor"
is "${test_name}: exit code" $exit_code 0
}
# --- TEST 7 ---
set subtest7 "TEST 7: nested ternary operators"
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest7 ($runtime)"
set exit_code [run_cmd_2way "stap --runtime=$runtime '$srcdir/$subdir/${test}_7.stp'" out stderr]
set exp_out "3
4
6
5
"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
|