diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog index c2f641d12e679ad153032a3f562fd5692e4cd464..e7cd2d6a7fea29e37d29d29638e5b22d3e3fefaa 100644 --- a/src/plugins/e-acsl/doc/Changelog +++ b/src/plugins/e-acsl/doc/Changelog @@ -25,6 +25,8 @@ Plugin E-ACSL <next-release> ############################################################################### +-* E-ACSL [2024-06-20] fix typing of logic functions over rationals + ############################################################################### Plugin E-ACSL 29.0 (Copper) ############################################################################### diff --git a/src/plugins/e-acsl/tests/arith/functions.c b/src/plugins/e-acsl/tests/arith/functions.c index c51ffd5bd0439aee40b0ef4e236b8008ea5a11bf..d226daab37b0c959d893164c6e7c2f5d43a27349 100644 --- a/src/plugins/e-acsl/tests/arith/functions.c +++ b/src/plugins/e-acsl/tests/arith/functions.c @@ -46,6 +46,9 @@ int glob = 5; // Test functions returning a rational /*@ logic real over(real a, real b) = a/b; */ +// Test functions using a rational +/*@ logic integer signum(℠x) = x > 0. ? 1 : x < 0. ? -1 : 0; */ + //Test function using a global variable (they elaborate to functions //with labels) int z = 8; @@ -91,4 +94,8 @@ int main(void) { /*@ assert f_here(27) == 27; */; /*@ assert f3(5) == 13; */; + + /*@ assert signum(3.0) > 0; */ + /*@ assert signum(0.0-3.0) < 0; */ + /*@ assert signum(0.0) ≡ 0; */ } diff --git a/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle index 54197511b15e324dbbfc3335111e1dff382fa499..b45b4d727ceb341debedf941fc93c446accf8d72 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle +++ b/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle @@ -1,73 +1,75 @@ [e-acsl] beginning translation. -[e-acsl] functions.c:78: Warning: +[e-acsl] functions.c:81: Warning: E-ACSL construct `function application' is not yet supported. Ignoring annotation. [e-acsl] translation done in project "e-acsl". -[eva:alarm] functions.c:56: Warning: +[eva:alarm] functions.c:59: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:56: Warning: +[eva:alarm] functions.c:59: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:58: Warning: +[eva:alarm] functions.c:61: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions.c:60: Warning: +[eva:alarm] functions.c:63: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:60: Warning: +[eva:alarm] functions.c:63: Warning: function __e_acsl_assert_register_long: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:61: Warning: +[eva:alarm] functions.c:64: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:61: Warning: +[eva:alarm] functions.c:64: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:62: Warning: +[eva:alarm] functions.c:65: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions.c:63: Warning: +[eva:alarm] functions.c:66: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions.c:68: Warning: +[eva:alarm] functions.c:71: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:68: Warning: +[eva:alarm] functions.c:71: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:71: Warning: +[eva:alarm] functions.c:74: Warning: function __e_acsl_assert_register_char: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:71: Warning: +[eva:alarm] functions.c:74: Warning: function __e_acsl_assert_register_char: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:73: Warning: +[eva:alarm] functions.c:76: Warning: function __e_acsl_assert_register_short: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:73: Warning: +[eva:alarm] functions.c:76: Warning: function __e_acsl_assert_register_short: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:78: Warning: +[eva:alarm] functions.c:81: Warning: function __e_acsl_assert_register_struct: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:78: Warning: +[eva:alarm] functions.c:81: Warning: function __e_acsl_assert_register_struct: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:78: Warning: assertion got status unknown. -[eva:alarm] functions.c:79: Warning: +[eva:alarm] functions.c:81: Warning: assertion got status unknown. +[eva:alarm] functions.c:82: Warning: function __e_acsl_assert_register_struct: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:79: Warning: +[eva:alarm] functions.c:82: Warning: function __e_acsl_assert_register_long: precondition data->values == \null || \valid(data->values) got status unknown. [eva:alarm] functions.c:28: Warning: function __e_acsl_assert_register_int: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:84: Warning: +[eva:alarm] functions.c:87: Warning: non-finite double value. assert \is_finite(__gen_e_acsl__8); -[eva:alarm] functions.c:84: Warning: +[eva:alarm] functions.c:87: Warning: function __e_acsl_assert_register_double: precondition data->values == \null || \valid(data->values) got status unknown. -[eva:alarm] functions.c:84: Warning: +[eva:alarm] functions.c:87: Warning: + function __e_acsl_assert, behavior blocking: precondition got status unknown. +[eva:alarm] functions.c:89: Warning: assertion got status unknown. +[eva:alarm] functions.c:91: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions.c:86: Warning: assertion got status unknown. -[eva:alarm] functions.c:88: Warning: +[eva:alarm] functions.c:99: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c index c93894f5c0b3395cb8211104eb52ddcaed0875db..8f65ae1ddbe86eddcf092a038e9e5ab452c9ec82 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c +++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c @@ -100,6 +100,15 @@ int __gen_e_acsl_f_sum(int x); */ void __gen_e_acsl_over(__e_acsl_mpq_t *__retres_arg, double a, double b); +/*@ logic integer signum(real x) = x > 0.? 1: (x < 0.? -1: 0); + +*/ +int __gen_e_acsl_signum_5(double x); + +int __gen_e_acsl_signum(double x); + +int __gen_e_acsl_signum_3(__e_acsl_mpq_t x); + int z = 8; /*@ logic integer f3{L}(integer y) = \at(z + y,L); @@ -126,7 +135,7 @@ int main(void) __gen_e_acsl_assert_data.pred_txt = "p1(x, y)"; __gen_e_acsl_assert_data.file = "functions.c"; __gen_e_acsl_assert_data.fct = "main"; - __gen_e_acsl_assert_data.line = 56; + __gen_e_acsl_assert_data.line = 59; __e_acsl_assert(__gen_e_acsl_p1_2,& __gen_e_acsl_assert_data); __e_acsl_assert_clean(& __gen_e_acsl_assert_data); } @@ -143,7 +152,7 @@ int main(void) __gen_e_acsl_assert_data_2.pred_txt = "p2(3, 4)"; __gen_e_acsl_assert_data_2.file = "functions.c"; __gen_e_acsl_assert_data_2.fct = "main"; - __gen_e_acsl_assert_data_2.line = 57; + __gen_e_acsl_assert_data_2.line = 60; __e_acsl_assert(__gen_e_acsl_p2_2,& __gen_e_acsl_assert_data_2); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2); } @@ -164,7 +173,7 @@ int main(void) __gen_e_acsl_assert_data_3.pred_txt = "p2(5, 99999999999999999999999999999)"; __gen_e_acsl_assert_data_3.file = "functions.c"; __gen_e_acsl_assert_data_3.fct = "main"; - __gen_e_acsl_assert_data_3.line = 58; + __gen_e_acsl_assert_data_3.line = 61; __e_acsl_assert(__gen_e_acsl_p2_4,& __gen_e_acsl_assert_data_3); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3); __gmpz_clear(__gen_e_acsl_); @@ -184,7 +193,7 @@ int main(void) __gen_e_acsl_assert_data_4.pred_txt = "f1(x, y) == 3"; __gen_e_acsl_assert_data_4.file = "functions.c"; __gen_e_acsl_assert_data_4.fct = "main"; - __gen_e_acsl_assert_data_4.line = 60; + __gen_e_acsl_assert_data_4.line = 63; __e_acsl_assert(__gen_e_acsl_f1_2 == 3L,& __gen_e_acsl_assert_data_4); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4); } @@ -206,7 +215,7 @@ int main(void) __gen_e_acsl_assert_data_5.pred_txt = "p2(x, f1(3, 4))"; __gen_e_acsl_assert_data_5.file = "functions.c"; __gen_e_acsl_assert_data_5.fct = "main"; - __gen_e_acsl_assert_data_5.line = 61; + __gen_e_acsl_assert_data_5.line = 64; __e_acsl_assert(__gen_e_acsl_p2_6,& __gen_e_acsl_assert_data_5); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5); } @@ -232,7 +241,7 @@ int main(void) __gen_e_acsl_assert_data_6.pred_txt = "f1(9, 99999999999999999999999999999) > 0"; __gen_e_acsl_assert_data_6.file = "functions.c"; __gen_e_acsl_assert_data_6.fct = "main"; - __gen_e_acsl_assert_data_6.line = 62; + __gen_e_acsl_assert_data_6.line = 65; __e_acsl_assert(__gen_e_acsl_gt_2 > 0,& __gen_e_acsl_assert_data_6); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6); __gmpz_clear(__gen_e_acsl__3); @@ -263,7 +272,7 @@ int main(void) __gen_e_acsl_assert_data_7.pred_txt = "f1(99999999999999999999999999999, 99999999999999999999999999999) ==\n199999999999999999999999999998"; __gen_e_acsl_assert_data_7.file = "functions.c"; __gen_e_acsl_assert_data_7.fct = "main"; - __gen_e_acsl_assert_data_7.line = 63; + __gen_e_acsl_assert_data_7.line = 66; __e_acsl_assert(__gen_e_acsl_eq == 0,& __gen_e_acsl_assert_data_7); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7); __gmpz_clear(__gen_e_acsl__5); @@ -289,7 +298,7 @@ int main(void) __gen_e_acsl_assert_data_8.pred_txt = "g(x) == x"; __gen_e_acsl_assert_data_8.file = "functions.c"; __gen_e_acsl_assert_data_8.fct = "main"; - __gen_e_acsl_assert_data_8.line = 68; + __gen_e_acsl_assert_data_8.line = 71; __e_acsl_assert(__gen_e_acsl_g_2 == x,& __gen_e_acsl_assert_data_8); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8); } @@ -309,7 +318,7 @@ int main(void) __gen_e_acsl_assert_data_9.pred_txt = "h_char(c) == c"; __gen_e_acsl_assert_data_9.file = "functions.c"; __gen_e_acsl_assert_data_9.fct = "main"; - __gen_e_acsl_assert_data_9.line = 71; + __gen_e_acsl_assert_data_9.line = 74; __e_acsl_assert((int)__gen_e_acsl_h_char_2 == (int)c, & __gen_e_acsl_assert_data_9); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9); @@ -330,7 +339,7 @@ int main(void) __gen_e_acsl_assert_data_10.pred_txt = "h_short(s) == s"; __gen_e_acsl_assert_data_10.file = "functions.c"; __gen_e_acsl_assert_data_10.fct = "main"; - __gen_e_acsl_assert_data_10.line = 73; + __gen_e_acsl_assert_data_10.line = 76; __e_acsl_assert((int)__gen_e_acsl_h_short_2 == (int)s, & __gen_e_acsl_assert_data_10); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10); @@ -354,7 +363,7 @@ int main(void) __gen_e_acsl_assert_data_11.pred_txt = "\\let r = t1(m); r.k == 8"; __gen_e_acsl_assert_data_11.file = "functions.c"; __gen_e_acsl_assert_data_11.fct = "main"; - __gen_e_acsl_assert_data_11.line = 78; + __gen_e_acsl_assert_data_11.line = 81; __e_acsl_assert(__gen_e_acsl_r.k == 8,& __gen_e_acsl_assert_data_11); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11); } @@ -375,7 +384,7 @@ int main(void) __gen_e_acsl_assert_data_12.pred_txt = "t2(t1(m)) == 17"; __gen_e_acsl_assert_data_12.file = "functions.c"; __gen_e_acsl_assert_data_12.fct = "main"; - __gen_e_acsl_assert_data_12.line = 79; + __gen_e_acsl_assert_data_12.line = 82; __e_acsl_assert(__gen_e_acsl_t2_2 == 17L,& __gen_e_acsl_assert_data_12); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_12); } @@ -395,7 +404,7 @@ int main(void) __gen_e_acsl_assert_data_13.pred_txt = "f2(d) > 0"; __gen_e_acsl_assert_data_13.file = "functions.c"; __gen_e_acsl_assert_data_13.fct = "main"; - __gen_e_acsl_assert_data_13.line = 84; + __gen_e_acsl_assert_data_13.line = 87; __e_acsl_assert(__gen_e_acsl_f2_2 > 0.,& __gen_e_acsl_assert_data_13); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_13); } @@ -412,7 +421,7 @@ int main(void) __gen_e_acsl_assert_data_14.pred_txt = "f_sum(100) == 100"; __gen_e_acsl_assert_data_14.file = "functions.c"; __gen_e_acsl_assert_data_14.fct = "main"; - __gen_e_acsl_assert_data_14.line = 86; + __gen_e_acsl_assert_data_14.line = 89; __e_acsl_assert(__gen_e_acsl_f_sum_2 == 100, & __gen_e_acsl_assert_data_14); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_14); @@ -437,7 +446,7 @@ int main(void) __gen_e_acsl_assert_data_15.pred_txt = "over(1., 2.) == 0.5"; __gen_e_acsl_assert_data_15.file = "functions.c"; __gen_e_acsl_assert_data_15.fct = "main"; - __gen_e_acsl_assert_data_15.line = 88; + __gen_e_acsl_assert_data_15.line = 91; __e_acsl_assert(__gen_e_acsl_eq_2 == 0,& __gen_e_acsl_assert_data_15); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_15); __gmpq_clear(__gen_e_acsl_over_2); @@ -456,7 +465,7 @@ int main(void) __gen_e_acsl_assert_data_16.pred_txt = "p_here(27)"; __gen_e_acsl_assert_data_16.file = "functions.c"; __gen_e_acsl_assert_data_16.fct = "main"; - __gen_e_acsl_assert_data_16.line = 90; + __gen_e_acsl_assert_data_16.line = 93; __e_acsl_assert(__gen_e_acsl_p_here_2,& __gen_e_acsl_assert_data_16); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_16); } @@ -473,7 +482,7 @@ int main(void) __gen_e_acsl_assert_data_17.pred_txt = "f_here(27) == 27"; __gen_e_acsl_assert_data_17.file = "functions.c"; __gen_e_acsl_assert_data_17.fct = "main"; - __gen_e_acsl_assert_data_17.line = 91; + __gen_e_acsl_assert_data_17.line = 94; __e_acsl_assert(__gen_e_acsl_f_here_2 == 27, & __gen_e_acsl_assert_data_17); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_17); @@ -491,11 +500,76 @@ int main(void) __gen_e_acsl_assert_data_18.pred_txt = "f3(5) == 13"; __gen_e_acsl_assert_data_18.file = "functions.c"; __gen_e_acsl_assert_data_18.fct = "main"; - __gen_e_acsl_assert_data_18.line = 93; + __gen_e_acsl_assert_data_18.line = 96; __e_acsl_assert(__gen_e_acsl_f3_2 == 13L,& __gen_e_acsl_assert_data_18); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_18); } /*@ assert f3(5) == 13; */ ; + { + int __gen_e_acsl_signum_2; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_19 = + {.values = (void *)0}; + __gen_e_acsl_signum_2 = __gen_e_acsl_signum(3.); + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_19,"signum(3.0)", + 0,__gen_e_acsl_signum_2); + __gen_e_acsl_assert_data_19.blocking = 1; + __gen_e_acsl_assert_data_19.kind = "Assertion"; + __gen_e_acsl_assert_data_19.pred_txt = "signum(3.0) > 0"; + __gen_e_acsl_assert_data_19.file = "functions.c"; + __gen_e_acsl_assert_data_19.fct = "main"; + __gen_e_acsl_assert_data_19.line = 98; + __e_acsl_assert(__gen_e_acsl_signum_2 > 0,& __gen_e_acsl_assert_data_19); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_19); + } + /*@ assert signum(3.0) > 0; */ ; + { + __e_acsl_mpq_t __gen_e_acsl__10; + __e_acsl_mpq_t __gen_e_acsl__11; + __e_acsl_mpq_t __gen_e_acsl_sub; + int __gen_e_acsl_signum_4; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_20 = + {.values = (void *)0}; + __gmpq_init(__gen_e_acsl__10); + __gmpq_set_d(__gen_e_acsl__10,0.); + __gmpq_init(__gen_e_acsl__11); + __gmpq_set_d(__gen_e_acsl__11,3.); + __gmpq_init(__gen_e_acsl_sub); + __gmpq_sub(__gen_e_acsl_sub, + (__e_acsl_mpq_struct const *)(__gen_e_acsl__10), + (__e_acsl_mpq_struct const *)(__gen_e_acsl__11)); + __gen_e_acsl_signum_4 = __gen_e_acsl_signum_3(__gen_e_acsl_sub); + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_20, + "signum(0.0 - 3.0)",0,__gen_e_acsl_signum_4); + __gen_e_acsl_assert_data_20.blocking = 1; + __gen_e_acsl_assert_data_20.kind = "Assertion"; + __gen_e_acsl_assert_data_20.pred_txt = "signum(0.0 - 3.0) < 0"; + __gen_e_acsl_assert_data_20.file = "functions.c"; + __gen_e_acsl_assert_data_20.fct = "main"; + __gen_e_acsl_assert_data_20.line = 99; + __e_acsl_assert(__gen_e_acsl_signum_4 < 0,& __gen_e_acsl_assert_data_20); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_20); + __gmpq_clear(__gen_e_acsl__10); + __gmpq_clear(__gen_e_acsl__11); + __gmpq_clear(__gen_e_acsl_sub); + } + /*@ assert signum(0.0 - 3.0) < 0; */ ; + { + int __gen_e_acsl_signum_6; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_21 = + {.values = (void *)0}; + __gen_e_acsl_signum_6 = __gen_e_acsl_signum_5(0.); + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_21,"signum(0.0)", + 0,__gen_e_acsl_signum_6); + __gen_e_acsl_assert_data_21.blocking = 1; + __gen_e_acsl_assert_data_21.kind = "Assertion"; + __gen_e_acsl_assert_data_21.pred_txt = "signum(0.0) == 0"; + __gen_e_acsl_assert_data_21.file = "functions.c"; + __gen_e_acsl_assert_data_21.fct = "main"; + __gen_e_acsl_assert_data_21.line = 100; + __e_acsl_assert(__gen_e_acsl_signum_6 == 0,& __gen_e_acsl_assert_data_21); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_21); + } + /*@ assert signum(0.0) == 0; */ ; __retres = 0; __e_acsl_memory_clean(); return __retres; @@ -764,6 +838,63 @@ void __gen_e_acsl_over(__e_acsl_mpq_t *__retres_arg, double a, double b) return; } +/*@ assigns \result; + assigns \result \from x; */ +int __gen_e_acsl_signum_5(double x) +{ + int __gen_e_acsl_if_6; + if (x > 0.) __gen_e_acsl_if_6 = 1; + else { + int __gen_e_acsl_if_5; + if (x < 0.) __gen_e_acsl_if_5 = -1; else __gen_e_acsl_if_5 = 0; + __gen_e_acsl_if_6 = __gen_e_acsl_if_5; + } + return __gen_e_acsl_if_6; +} + +/*@ assigns \result; + assigns \result \from x; */ +int __gen_e_acsl_signum(double x) +{ + int __gen_e_acsl_if_2; + if (x > 0.) __gen_e_acsl_if_2 = 1; + else { + int __gen_e_acsl_if; + if (x < 0.) __gen_e_acsl_if = -1; else __gen_e_acsl_if = 0; + __gen_e_acsl_if_2 = __gen_e_acsl_if; + } + return __gen_e_acsl_if_2; +} + +/*@ assigns \result; + assigns \result \from *((__e_acsl_mpq_struct *)x); */ +int __gen_e_acsl_signum_3(__e_acsl_mpq_t x) +{ + __e_acsl_mpq_t __gen_e_acsl__12; + int __gen_e_acsl_gt_3; + int __gen_e_acsl_if_4; + __gmpq_init(__gen_e_acsl__12); + __gmpq_set_d(__gen_e_acsl__12,0.); + __gen_e_acsl_gt_3 = __gmpq_cmp((__e_acsl_mpq_struct const *)(x), + (__e_acsl_mpq_struct const *)(__gen_e_acsl__12)); + if (__gen_e_acsl_gt_3 > 0) __gen_e_acsl_if_4 = 1; + else { + __e_acsl_mpq_t __gen_e_acsl__13; + int __gen_e_acsl_lt; + int __gen_e_acsl_if_3; + __gmpq_init(__gen_e_acsl__13); + __gmpq_set_d(__gen_e_acsl__13,0.); + __gen_e_acsl_lt = __gmpq_cmp((__e_acsl_mpq_struct const *)(x), + (__e_acsl_mpq_struct const *)(__gen_e_acsl__13)); + if (__gen_e_acsl_lt < 0) __gen_e_acsl_if_3 = -1; + else __gen_e_acsl_if_3 = 0; + __gen_e_acsl_if_4 = __gen_e_acsl_if_3; + __gmpq_clear(__gen_e_acsl__13); + } + __gmpq_clear(__gen_e_acsl__12); + return __gen_e_acsl_if_4; +} + /*@ assigns \result; assigns \result \from y; */ long __gen_e_acsl_f3(int y) diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_sign_rational.c b/src/plugins/e-acsl/tests/arith/oracle/gen_sign_rational.c deleted file mode 100644 index 1fa5198a8166bf42ac9b36acd2eb66f794837cc9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/tests/arith/oracle/gen_sign_rational.c +++ /dev/null @@ -1,149 +0,0 @@ -/* Generated by Frama-C */ -#include "pthread.h" -#include "sched.h" -#include "signal.h" -#include "stddef.h" -#include "stdint.h" -#include "stdio.h" -#include "time.h" -extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; - -/*@ logic integer signum(real x) = x > 0.? 1: (x < 0.? -1: 0); - -*/ -int __gen_e_acsl_signum_5(double x); - -int __gen_e_acsl_signum(double x); - -int __gen_e_acsl_signum_3(__e_acsl_mpq_t x); - -int main(void) -{ - int __retres; - __e_acsl_memory_init((int *)0,(char ***)0,8UL); - { - int __gen_e_acsl_signum_2; - __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0}; - __gen_e_acsl_signum_2 = __gen_e_acsl_signum(3.); - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"signum(3.0)",0, - __gen_e_acsl_signum_2); - __gen_e_acsl_assert_data.blocking = 1; - __gen_e_acsl_assert_data.kind = "Assertion"; - __gen_e_acsl_assert_data.pred_txt = "signum(3.0) > 0"; - __gen_e_acsl_assert_data.file = "sign_rational.c"; - __gen_e_acsl_assert_data.fct = "main"; - __gen_e_acsl_assert_data.line = 11; - __e_acsl_assert(__gen_e_acsl_signum_2 > 0,& __gen_e_acsl_assert_data); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data); - } - /*@ assert signum(3.0) > 0; */ ; - { - __e_acsl_mpq_t __gen_e_acsl_; - __e_acsl_mpq_t __gen_e_acsl__2; - __e_acsl_mpq_t __gen_e_acsl_sub; - int __gen_e_acsl_signum_4; - __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 = - {.values = (void *)0}; - __gmpq_init(__gen_e_acsl_); - __gmpq_set_d(__gen_e_acsl_,0.); - __gmpq_init(__gen_e_acsl__2); - __gmpq_set_d(__gen_e_acsl__2,3.); - __gmpq_init(__gen_e_acsl_sub); - __gmpq_sub(__gen_e_acsl_sub,(__e_acsl_mpq_struct const *)(__gen_e_acsl_), - (__e_acsl_mpq_struct const *)(__gen_e_acsl__2)); - __gen_e_acsl_signum_4 = __gen_e_acsl_signum_3(__gen_e_acsl_sub); - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2, - "signum(0.0 - 3.0)",0,__gen_e_acsl_signum_4); - __gen_e_acsl_assert_data_2.blocking = 1; - __gen_e_acsl_assert_data_2.kind = "Assertion"; - __gen_e_acsl_assert_data_2.pred_txt = "signum(0.0 - 3.0) < 0"; - __gen_e_acsl_assert_data_2.file = "sign_rational.c"; - __gen_e_acsl_assert_data_2.fct = "main"; - __gen_e_acsl_assert_data_2.line = 12; - __e_acsl_assert(__gen_e_acsl_signum_4 < 0,& __gen_e_acsl_assert_data_2); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2); - __gmpq_clear(__gen_e_acsl_); - __gmpq_clear(__gen_e_acsl__2); - __gmpq_clear(__gen_e_acsl_sub); - } - /*@ assert signum(0.0 - 3.0) < 0; */ ; - { - int __gen_e_acsl_signum_6; - __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 = - {.values = (void *)0}; - __gen_e_acsl_signum_6 = __gen_e_acsl_signum_5(0.); - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"signum(0.0)", - 0,__gen_e_acsl_signum_6); - __gen_e_acsl_assert_data_3.blocking = 1; - __gen_e_acsl_assert_data_3.kind = "Assertion"; - __gen_e_acsl_assert_data_3.pred_txt = "signum(0.0) == 0"; - __gen_e_acsl_assert_data_3.file = "sign_rational.c"; - __gen_e_acsl_assert_data_3.fct = "main"; - __gen_e_acsl_assert_data_3.line = 13; - __e_acsl_assert(__gen_e_acsl_signum_6 == 0,& __gen_e_acsl_assert_data_3); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3); - } - /*@ assert signum(0.0) == 0; */ ; - __retres = 0; - __e_acsl_memory_clean(); - return __retres; -} - -/*@ assigns \result; - assigns \result \from x; */ -int __gen_e_acsl_signum_5(double x) -{ - int __gen_e_acsl_if_6; - if (x > 0.) __gen_e_acsl_if_6 = 1; - else { - int __gen_e_acsl_if_5; - if (x < 0.) __gen_e_acsl_if_5 = -1; else __gen_e_acsl_if_5 = 0; - __gen_e_acsl_if_6 = __gen_e_acsl_if_5; - } - return __gen_e_acsl_if_6; -} - -/*@ assigns \result; - assigns \result \from x; */ -int __gen_e_acsl_signum(double x) -{ - int __gen_e_acsl_if_2; - if (x > 0.) __gen_e_acsl_if_2 = 1; - else { - int __gen_e_acsl_if; - if (x < 0.) __gen_e_acsl_if = -1; else __gen_e_acsl_if = 0; - __gen_e_acsl_if_2 = __gen_e_acsl_if; - } - return __gen_e_acsl_if_2; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpq_struct *)x); */ -int __gen_e_acsl_signum_3(__e_acsl_mpq_t x) -{ - __e_acsl_mpq_t __gen_e_acsl__3; - int __gen_e_acsl_gt; - int __gen_e_acsl_if_4; - __gmpq_init(__gen_e_acsl__3); - __gmpq_set_d(__gen_e_acsl__3,0.); - __gen_e_acsl_gt = __gmpq_cmp((__e_acsl_mpq_struct const *)(x), - (__e_acsl_mpq_struct const *)(__gen_e_acsl__3)); - if (__gen_e_acsl_gt > 0) __gen_e_acsl_if_4 = 1; - else { - __e_acsl_mpq_t __gen_e_acsl__4; - int __gen_e_acsl_lt; - int __gen_e_acsl_if_3; - __gmpq_init(__gen_e_acsl__4); - __gmpq_set_d(__gen_e_acsl__4,0.); - __gen_e_acsl_lt = __gmpq_cmp((__e_acsl_mpq_struct const *)(x), - (__e_acsl_mpq_struct const *)(__gen_e_acsl__4)); - if (__gen_e_acsl_lt < 0) __gen_e_acsl_if_3 = -1; - else __gen_e_acsl_if_3 = 0; - __gen_e_acsl_if_4 = __gen_e_acsl_if_3; - __gmpq_clear(__gen_e_acsl__4); - } - __gmpq_clear(__gen_e_acsl__3); - return __gen_e_acsl_if_4; -} - - diff --git a/src/plugins/e-acsl/tests/arith/oracle/sign_rational.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/sign_rational.res.oracle deleted file mode 100644 index 1d33ef8c2a90e87a42879c53d962e739225f65a7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/tests/arith/oracle/sign_rational.res.oracle +++ /dev/null @@ -1,4 +0,0 @@ -[e-acsl] beginning translation. -[e-acsl] translation done in project "e-acsl". -[eva:alarm] sign_rational.c:12: Warning: - function __e_acsl_assert, behavior blocking: precondition got status unknown. diff --git a/src/plugins/e-acsl/tests/arith/sign_rational.c b/src/plugins/e-acsl/tests/arith/sign_rational.c deleted file mode 100644 index 34a823fb8320a1f2bd6d52ee9528b0b5013ac127..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/tests/arith/sign_rational.c +++ /dev/null @@ -1,15 +0,0 @@ -/* run.config - COMMENT: a logic function defined over rationals -*/ - -/*@ - logic integer signum(℠x) = - x > 0. ? 1 : x < 0. ? -1 : 0; -*/ - -int main() { - /*@ assert signum(3.0) > 0; */ - /*@ assert signum(0.0-3.0) < 0; */ - /*@ assert signum(0.0) ≡ 0; */ - return 0; -}