Skip to content
Snippets Groups Projects
Commit c3565e59 authored by François Bobot's avatar François Bobot
Browse files

Import from Bin:a1af7a0 Src:7d7d01bcb farith:a93db57

parent e23901fe
No related branches found
No related tags found
1 merge request!13Fix bug25
Pipeline #34001 failed
...@@ -800,12 +800,10 @@ smt_test(TO,Size) :- ...@@ -800,12 +800,10 @@ smt_test(TO,Size) :-
%StrDir = "./QF_FPLRA/schanda/", % 0 TO (cvc4 0) %StrDir = "./QF_FPLRA/schanda/", % 0 TO (cvc4 0)
%---------------------------------------------------------------- %----------------------------------------------------------------
%StrDir = "./QF_FP/20170501-Heizmann-UltimateAutomizer/", % 0 %StrDir = "./QF_FP/20170501-Heizmann-UltimateAutomizer/", % 0
% A VOIR
%StrDir = "./QF_FP/20190429-UltimateAutomizerSvcomp2019/",% 0 (bitwuzla 0) %StrDir = "./QF_FP/20190429-UltimateAutomizerSvcomp2019/",% 0 (bitwuzla 0)
%StrDir = "./QF_FP/ramalho/", % 4 (4 min_solve)(cvc4 19)(bitwuzla 17) %StrDir = "./QF_FP/ramalho/", % 4 (min_solve)(cvc4 19)(bitwuzla 17)
%StrDir = "./QF_FP/griggio/", % 43 TO (42/41 min_solve)(cast float-double, delta 0) (cvc4 89)(bitwuzla 74) StrDir = "./QF_FP/griggio/", % 43 (min_solve, cast float-double, delta 0) (cvc4 89)(bitwuzla 74)
%StrDir = "./QF_FP/schanda/spark/", % 5 TO (5 min_solve) (avec (X+Y)/2 = X/2+Y/2 %StrDir = "./QF_FP/schanda/spark/", % 7 (min_solve avec X =< (X+Y)/2 =< Y) (ncvc4 8)(bitwuzla 3)
% quand c'est correcte, pas de inf/0 pour le resultat) (ncvc4 8)(bitwuzla 3)
%StrDir = "./QF_FP/wintersteiger/", % tout OK %StrDir = "./QF_FP/wintersteiger/", % tout OK
%----------------------------------------------------------------- %-----------------------------------------------------------------
...@@ -823,12 +821,12 @@ smt_test(TO,Size) :- ...@@ -823,12 +821,12 @@ smt_test(TO,Size) :-
%StrDir = "./QF_ABV/bmc-arrays/", %StrDir = "./QF_ABV/bmc-arrays/",
%----------------------------------------------------------------- %-----------------------------------------------------------------
%StrDir = "QF_AX/", %StrDir = "QF_AX/",
%StrDir = "QF_AX/storeinv/", %StrDir = "QF_AX/storeinv/", % 3
%StrDir = "QF_AX/swap/", %StrDir = "QF_AX/swap/", % 8
%StrDir = "QF_AX/storecomm/", %StrDir = "QF_AX/storecomm/", % 0
%StrDir = "QF_AX/cvc/", %StrDir = "QF_AX/cvc/", % 0
StrDir = "QF_ALIA/qlock2/", % Des TO et core dump %StrDir = "QF_ALIA/qlock2/", % Des TO et core dump
%StrDir = "QF_ALIA/cvc/", % TOUT OK %StrDir = "QF_ALIA/cvc/", % TOUT OK
%StrDir = "QF_ALIA/UltimateAutomizer2/",% des TO %StrDir = "QF_ALIA/UltimateAutomizer2/",% des TO
%StrDir = "QF_ALIA/piVC/", % TOUT OK %StrDir = "QF_ALIA/piVC/", % TOUT OK
...@@ -1035,12 +1033,13 @@ smt_unit_test(TO) :- ...@@ -1035,12 +1033,13 @@ smt_unit_test(TO) :-
%StrDir = "./QF_FP/ramalho/",% 6-2 T0 %StrDir = "./QF_FP/ramalho/",% 6-2 T0
%StrDir = "./QF_FP/griggio/", % 59 TO en 24s, 51 en 60s (cvc4 90 en 60s) %StrDir = "./QF_FP/griggio/", % 59 TO en 24s, 51 en 60s (cvc4 90 en 60s)
%StrDir = "./QF_FP/schanda/spark/",% 7 TO %StrDir = "./QF_FP/schanda/spark/",% 7 TO
StrDir = "./QF_FP/wintersteiger/", % 0 TO %StrDir = "./QF_FP/wintersteiger/", % 0 TO
%------------------------------------------------------------------------ %------------------------------------------------------------------------
%StrDir = "QF_AX/", StrDir = "QF_AX/",
%StrDir = "QF_AX/storeinv/", %StrDir = "QF_AX/storeinv/",
%StrDir = "QF_AX/swap/", %StrDir = "QF_AX/swap/",
%StrDir = "QF_AX/storecomm/", %StrDir = "QF_AX/storecomm/",
%StrDir = "QF_AX/cvc/",
%---------------------------------------------------------------------- %----------------------------------------------------------------------
%StrDir = "./QF_BV/", %StrDir = "./QF_BV/",
%StrDir = "./QF_BV/20170501-Heizmann-UltimateAutomizer/", %StrDir = "./QF_BV/20170501-Heizmann-UltimateAutomizer/",
......
...@@ -12792,6 +12792,7 @@ div_real_bis(Type,A,B,C) :- ...@@ -12792,6 +12792,7 @@ div_real_bis(Type,A,B,C) :-
true true
; div_real_rec(Type,A,B,C), ; div_real_rec(Type,A,B,C),
div_real_ineqs(Type,A,B,C), div_real_ineqs(Type,A,B,C),
average_real_ineqs(Type,A,B,C),
div_real_inst(Type,A,B,C,Continue3), div_real_inst(Type,A,B,C,Continue3),
check_div_mult_exact(Type,A,B,C,Continue3,Continue4), check_div_mult_exact(Type,A,B,C,Continue3,Continue4),
(var(Continue4) -> (var(Continue4) ->
...@@ -12800,8 +12801,7 @@ div_real_bis(Type,A,B,C) :- ...@@ -12800,8 +12801,7 @@ div_real_bis(Type,A,B,C) :-
set_prio_inst([A,B,C],4,5,Prio), set_prio_inst([A,B,C],4,5,Prio),
NewGoal = div_real1(Type,A,B,C), NewGoal = div_real1(Type,A,B,C),
my_suspend(NewGoal,Prio,(A,B,C)->suspend:constrained), my_suspend(NewGoal,Prio,(A,B,C)->suspend:constrained)))).
saturate_div_real_two(Type,A,B,C)))).
   
check_div_mult_exact(Type,A,B,C,Continue,NContinue) :- check_div_mult_exact(Type,A,B,C,Continue,NContinue) :-
var(Continue), var(Continue),
...@@ -12828,52 +12828,31 @@ check_div_mult_exact(Type,A,B,C,_,Continue) :- ...@@ -12828,52 +12828,31 @@ check_div_mult_exact(Type,A,B,C,_,Continue) :-
% permet de capturer certains calculs de moyenne % permet de capturer certains calculs de moyenne
% Ex A =< (A+B)/2 =< B et A < B % Ex A =< (A+B)/2 =< B et A < B
% pour les average_(1,2,3) de schanda % pour les average_(1,2,3) de schanda
%saturate_div_real_two(Type,A,B,C) :- !. % average_real_ineqs(Type,A,B,C) :- !.
% Bizarre !! % Bizarre !!
saturate_div_real_two(Type,A,B,C) :- average_real_ineqs(Type,A,B,C) :-
((B == 2.0, ((B == 2.0,
not_inf_bounds(A),
not_zero(C),
get_saved_cstr_suspensions(LSusp), get_saved_cstr_suspensions(LSusp),
member((S,add_real1(Type,X,Y,AA)),LSusp), member((S,add_real1(Type,X,Y,AA)),LSusp),
% (X+Y)/2 = C AA == A,
% dans ce cas (X+Y)/2 = X/2 + Y/2
var(X), var(X),
var(Y)) var(Y),
get_rel_between_real_args(X,Y,Rel),
occurs(Rel,(<,=<,>,>=)))
-> ->
% on sature en creant X/2 + Y/2 = C (getval(use_delta,1)@eclipse ->
get_cstr_suspensions(X,LSX), (occurs(Rel,(=<,<)) ->
((member(SX,LSX), launch_real_ineq(=<,Type,X,C),
get_suspension_data(SX,goal,div_real1(Type,XX,X2,Xd2)), launch_real_ineq(=<,Type,C,Y)
X2 == 2.0, ; launch_real_ineq(=<,Type,Y,C),
XX == X) launch_real_ineq(=<,Type,C,X))
-> ; (occurs(Rel,(=<,<)) ->
Goals1 = [] launch_geq_real(Type,Y,C),
; Goals1 = [div_real(Type,X,2.0,Xd2)]), launch_geq_real(Type,C,X)
get_cstr_suspensions(Y,LSY), ; launch_geq_real(Type,X,C),
((member(SY,LSY), launch_geq_real(Type,C,Y)))
get_suspension_data(SY,goal,div_real1(Type,YY,Y2,Yd2)),
Y2 == 2.0,
YY == Y)
->
Goals2 = Goals1
; append(Goals1,[div_real(Type,Y,2.0,Yd2)],Goals2)),
(Goals2 == [] ->
((member((_,add_real1(Type,Ud2,Vd2,CC)),LSusp),
CC == C,
(Ud2 == Xd2 ->
Vd2 == Yd2
; Ud2 == Yd2,
Vd2 == Xd2))
->
Goals = []
; Goals = [add_real(Type,Xd2,Yd2,C)])
; append(Goals2,[add_real(Type,Xd2,Yd2,C)],Goals)),
(foreach(G,Goals) do
call_priority(G,2))
; true). ; true).
   
%% PMO si les 3 args sont des float_int entre -2^53 et 2^53 on peut %% PMO si les 3 args sont des float_int entre -2^53 et 2^53 on peut
%% deleguer le calcul de mult_real aux entiers %% deleguer le calcul de mult_real aux entiers
check_launch_div_int(Type,A,B,C,Continue,_) :- check_launch_div_int(Type,A,B,C,Continue,_) :-
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment