From da5b382e3e895bd2c231e4b58a38ce680dfd187f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Thu, 21 Jan 2021 09:41:16 +0100 Subject: [PATCH] [Eva] Adds tests for the backward logical operators LAnd and LOr. --- tests/value/backward_arith.i | 45 +++++++++++++++ tests/value/oracle/backward_arith.res.oracle | 59 +++++++++++++++++--- 2 files changed, 95 insertions(+), 9 deletions(-) diff --git a/tests/value/backward_arith.i b/tests/value/backward_arith.i index a26120d37e8..afe946261c3 100644 --- a/tests/value/backward_arith.i +++ b/tests/value/backward_arith.i @@ -1,4 +1,5 @@ /* run.config* + STDOPT: +"-keep-logical-operators" */ /* Test the soundness of arithmetic backward propagators. */ @@ -26,8 +27,52 @@ void unsigned_neg () { Frama_C_show_each_smaller_than_minus_ten_but_zero(x); /* <= 4294967286 but 0 */ } +void logical_operators () { + unsigned int x = nondet; + unsigned int y = nondet; + unsigned int a = x % 10; + unsigned int b = x % 10; + + // Logical conjunction LAnd. + if (x < 11 && y < 21) + Frama_C_show_each("0..10", x, "0..20", y); + else + Frama_C_show_each("top", x, "top", y); + if (a < 10 && y < 10) + Frama_C_show_each("0..9", a, "0..9", y); + else + Frama_C_show_each("0..9", a, "10..max", y); + if (a > 10 && y < 10) + Frama_C_show_each("bottom", a, y); + else + Frama_C_show_each("0..9", a, "top", y); + if (a > 10 && b > 10) + Frama_C_show_each("bottom", a, b); + else + Frama_C_show_each("0..9", a, "0..9", b); + + // Logical disjunction LOr. + if (x > 10 || y > 20) + Frama_C_show_each("top", x, "top", y); + else + Frama_C_show_each("0..10", x, "0..20", y); + if (a > 10 || y > 10) + Frama_C_show_each("0..9", a, "11..max", y); + else + Frama_C_show_each("0..9", a, "0..10", y); + if (a < 10 || y > 10) + Frama_C_show_each("0..9", a, "top", y); + else + Frama_C_show_each("bottom", a, y); + if (a > 10 || b > 10) + Frama_C_show_each("bottom", a, b); + else + Frama_C_show_each("0..9", a, "0..9", b); +} + int main () { unsigned_neg (); + logical_operators (); return 0; } diff --git a/tests/value/oracle/backward_arith.res.oracle b/tests/value/oracle/backward_arith.res.oracle index af34524c922..91015a23c5f 100644 --- a/tests/value/oracle/backward_arith.res.oracle +++ b/tests/value/oracle/backward_arith.res.oracle @@ -5,42 +5,83 @@ [eva:initial-state] Values of globals at initialization nondet ∈ [--..--] [eva] computing for function unsigned_neg <- main. - Called from tests/value/backward_arith.i:31. -[eva] tests/value/backward_arith.i:12: Frama_C_show_each_ten: {10} -[eva] tests/value/backward_arith.i:14: + Called from tests/value/backward_arith.i:75. +[eva] tests/value/backward_arith.i:13: Frama_C_show_each_ten: {10} +[eva] tests/value/backward_arith.i:15: Frama_C_show_each_not_ten: [0..4294967295] -[eva] tests/value/backward_arith.i:16: +[eva] tests/value/backward_arith.i:17: Frama_C_show_each_greater_than_ten_or_zero: [0..4294967295] -[eva] tests/value/backward_arith.i:18: +[eva] tests/value/backward_arith.i:19: Frama_C_show_each_smaller_than_ten_but_zero: [1..10] -[eva] tests/value/backward_arith.i:20: Frama_C_show_each_minus_ten: {4294967286} -[eva] tests/value/backward_arith.i:22: +[eva] tests/value/backward_arith.i:21: Frama_C_show_each_minus_ten: {4294967286} +[eva] tests/value/backward_arith.i:23: Frama_C_show_each_not_minus_ten: [0..4294967295] -[eva] tests/value/backward_arith.i:24: +[eva] tests/value/backward_arith.i:25: Frama_C_show_each_greater_than_minus_ten_or_zero: [0..4294967295] -[eva] tests/value/backward_arith.i:26: +[eva] tests/value/backward_arith.i:27: Frama_C_show_each_smaller_than_minus_ten_but_zero: [1..4294967286] [eva] Recording results for unsigned_neg [eva] Done for function unsigned_neg +[eva] computing for function logical_operators <- main. + Called from tests/value/backward_arith.i:76. +[eva] tests/value/backward_arith.i:38: + Frama_C_show_each: {{ "0..10" }}, [0..10], {{ "0..20" }}, [0..20] +[eva] tests/value/backward_arith.i:40: + Frama_C_show_each: {{ "top" }}, [0..4294967295], {{ "top" }}, [0..4294967295] +[eva] tests/value/backward_arith.i:42: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "0..9" }}, [0..9] +[eva] tests/value/backward_arith.i:44: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "10..max" }}, [10..4294967295] +[eva] tests/value/backward_arith.i:48: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "top" }}, [0..4294967295] +[eva] tests/value/backward_arith.i:52: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "0..9" }}, [0..9] +[eva] tests/value/backward_arith.i:56: + Frama_C_show_each: {{ "top" }}, [0..4294967295], {{ "top" }}, [0..4294967295] +[eva] tests/value/backward_arith.i:58: + Frama_C_show_each: {{ "0..10" }}, [0..10], {{ "0..20" }}, [0..20] +[eva] tests/value/backward_arith.i:60: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "11..max" }}, [11..4294967295] +[eva] tests/value/backward_arith.i:62: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "0..10" }}, [0..10] +[eva] tests/value/backward_arith.i:64: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "top" }}, [0..4294967295] +[eva] tests/value/backward_arith.i:70: + Frama_C_show_each: {{ "0..9" }}, [0..9], {{ "0..9" }}, [0..9] +[eva] Recording results for logical_operators +[eva] Done for function logical_operators [eva] Recording results for main [eva] done for function main [eva] ====== VALUES COMPUTED ====== +[eva:final-states] Values at end of function logical_operators: + x ∈ [--..--] + y ∈ [--..--] + a ∈ [0..9] + b ∈ [0..9] [eva:final-states] Values at end of function unsigned_neg: x ∈ [--..--] minus_ten ∈ {4294967286} [eva:final-states] Values at end of function main: __retres ∈ {0} +[from] Computing for function logical_operators +[from] Done for function logical_operators [from] Computing for function unsigned_neg [from] Done for function unsigned_neg [from] Computing for function main [from] Done for function main [from] ====== DEPENDENCIES COMPUTED ====== These dependencies hold at termination for the executions that terminate: +[from] Function logical_operators: + NO EFFECTS [from] Function unsigned_neg: NO EFFECTS [from] Function main: \result FROM \nothing [from] ====== END OF DEPENDENCIES ====== +[inout] Out (internal) for function logical_operators: + x; y; a; b +[inout] Inputs for function logical_operators: + nondet [inout] Out (internal) for function unsigned_neg: x; minus_ten [inout] Inputs for function unsigned_neg: -- GitLab