-
François Bobot authoredFrançois Bobot authored
col_solve.pl 52.20 KiB
:- pragma(nowarnings).
%% Rend le compilateur silencieux
:- set_event_handler(139,true/0).
%% Warning "deprecated"
:- set_event_handler(75,true/0).
%% Warning "declared but not defined"
:- set_event_handler(76,true/0).
%% Warning "used but not declared"
:- set_event_handler(77,true/0).
%% Warning "referring to non-exported predicate"
:- set_event_handler(84,true/0).
%% Warning "already reexported"
:- set_event_handler(90,true/0).
%:- set_flag(variable_names,off).
:- lib(lists).
:- lib(timeout).
:- include(colibri).
%% On doit refaire les set_handler apres le chargement de colibri
%% Rend le compilateur silencieux
:- set_event_handler(139,true/0).
%% Warning "deprecated"
:- set_event_handler(75,true/0).
%% Warning "declared but not defined"
:- set_event_handler(76,true/0).
%% Warning "used but not declared"
:- set_event_handler(77,true/0).
%% Warning "referring to non-exported predicate"
:- set_event_handler(84,true/0).
%% Warning "already reexported"
:- set_event_handler(90,true/0).
:- module(eclipse).
:- import(colibri).
?- start_colibri.
?- setval(float_eval,float_double).
% mode nodebug.
?- setval(gdbg,0).
?- setval(threshold,1e-3).
/*
?- % Pour reduire la frequence des gc
% et gagner du temps
get_flag(max_global_trail,MGT),
% la valeur par defaut est max_global_trail/32
GCInter is fix(MGT/2),
set_flag(gc_interval,GCInter),
set_flag(gc_interval_dict,10000000).
*/
:- local reference(constraints).
:- local reference(from_pu).
:- no_3B.
:- setval(solve,1).
:- setval(time_limit,0).
no_solve :-
setval(solve,0).
set_timeout(T) :-
((integer(T),
T >= 0)
->
setval(time_limit,T)
; writeln(output,"Expecting timeout integer value > 0."),
exit_block(syntax)).
get_version(Num) :-
system("svn info --show-item revision > revision"),
open(revision,read,Stream),
read_string(Stream,"\n\r",_,Str),
close(Stream),
system("rm revision"),
split_string(Str,":"," ",[_,Num]).
set_version :-
get_version(Num),
assert(colibri_version(Num)).
show_version :-
colibri_version(Num),
writeln(output,Num).
interactive_solve :-
% set_flag(variable_names,on),
repeat,
garbage_collect,
write(output,[colibri]:""),
block(read(input,Goal),
Tag,
(writeln(error,exit(Tag)),
fail)),
((Goal == halt;
Goal == end_of_file)
->
!
; no_3B,
use_delta,
set_threshold(1e-3),
term_variables(Goal,Vars),
(foreach(Var,Vars),
foreach((SVar,Var),Bindings) do
open(string(""),write,Stream),
write(Stream,Var),
get_stream_info(Stream,name,SVar),
close(Stream)),
(cgiveInstancePath(solve_cstrs,Goal,Path) ->
creplace_at_path_in_term(Path,Goal,(type_bindings(Test,
Bindings,
NBindings),
solve_cstrs)),
Solve = 1,
NGoal = Goal
; NGoal = (Goal,type_bindings(Test,Bindings,NBindings))),
block((call(NGoal) ->
(nonvar(Solve) ->
nl(output),
writeln(output,'SAT'),
nl(output),
dump_binding(Test,NBindings)
; (current_suspension(_) ->
true
; nl(output),
writeln(output,'SAT'),
SAT = 1),
(nonvar(SAT) ->
nl(output),
dump_binding(Test,NBindings)
; get_goals(LSusp,LinSusps,Goals),
term_variables(Bindings,ProtectedVars),
fold_goals(Goals,Goals,ProtectedVars,NewGoals),
term_variables(NewGoals,GVars0),
(foreach(GVar0,GVars0),
fromto([],I,O,GVars),
param(NBindings) do
(occurs(GVar0,NBindings) ->
O = I
; O = [GVar0|I])),
(foreach(GVar,GVars),
foreach((GSVar,GVar),GBindings) do
open(string(""),write,Stream),
write_term(Stream,GVar,
[attributes(none)]),
get_stream_info(Stream,name,GSVar),
close(Stream)),
type_bindings(Test,GBindings,NGBindings),
nl(output),
dump_binding(Test,NBindings),
dump_binding(Test,NGBindings),
nl(output),
writeln(output,'CONSTRAINTS:'),
(foreach(TGoal,NewGoals) do
write_term(output,TGoal,
[as(goal),depth(full),
attributes(none)]),
nl(output))))
; nl(output),
writeln(output,'UNSAT')),
Tag,
writeln(error,exit(Tag))),
fail).
get_goals([],_,[]).
get_goals([Susp|LSusp],LinSusps,Goals) :-
(member(Susp,LinSusps) ->
Goals = EGoals
; get_suspension_data(Susp,goal,Goal),
(trans_col(Goal,TGoal) ->
(TGoal = "" ->
Goals = EGoals
; Goals = [TGoal|EGoals])
; Goals = [Goal|EGoals])),
get_goals(LSusp,LinSusps,EGoals).
fold_goals(Goals,OGoals,ProtectedVars,NewGoals) :-
fold_goals0(Goals,OGoals,ProtectedVars,NGoals),
sort(NGoals,SGoals),
trivial_goal_elim(SGoals,NewGoals).
fold_goals0([],Gs,_,Gs).
fold_goals0([Goal|Goals],OGoals,ProtectedVars,NewGoals) :-
fold_goal(Goal,OGoals,ProtectedVars,NGoals),
fold_goals0(Goals,NGoals,ProtectedVars,NewGoals).
fold_goal(Goal,OGoals,ProtectedVars,NGoals) :-
((compound(Goal),
Goal =.. [F,E,V],
occurs(F,(#=,$=)))
->
((var(V),
not occurs(V,E),
not occurs(V,ProtectedVars))
->
findall(Path,cgiveVarInstancePath(V,OGoals,[],Path),Paths),
(foreach(Path,Paths),
param(OGoals,E) do
creplace_at_path_in_term(Path,OGoals,E)),
NGoals = OGoals
; ((Goal = (A + B #= V),
(Var = A, Other = B; Var = B, Other = A),
var(Var),
not occurs(Var,ProtectedVars))
->
once (member_begin_end(CGoal,OGoals,NGoals,End,End),
Goal == CGoal),
findall(Path,cgiveVarInstancePath(Var,NGoals,[],Path),
Paths),
NE = (V-Other),
(foreach(Path,Paths),
param(NGoals,NE) do
creplace_at_path_in_term(Path,NGoals,NE))
; NGoals = OGoals))
; NGoals = OGoals).
trivial_goal_elim([],[]).
trivial_goal_elim([Goal|Goals],NewGoals) :-
((compound(Goal),
Goal =.. [F,E1,E2],
E1 == E2)
->
(occurs(F,(#=,#>=,$=,$>=)) ->
NewGoals = ENewGoals
; (occurs(F,(#\=,#<,#>,($\=,$<,$>))) ->
nl(output),
writeln(output,'UNSAT'),
fail
; NewGoals = [Goal|ENewGoals]))
; NewGoals = [Goal|ENewGoals]),
trivial_goal_elim(Goals,ENewGoals).
solve(FILE) :-
solve(_,FILE,0,Code),
exit(Code).
solve(Test,FILE,TO,Code) :-
setval(solve,1),
set_flag(variable_names,on),
no_3B,
use_delta,
%no_simplex,
%use_simplex par defaut
%no_approx,
%use_approx par_defaut
set_threshold(1e-3),
set_timeout_handler,
set_timeout(TO),
((exists(FILE),
get_file_info(FILE, readable, on))
->
true
; concat_string(["Cannot read input file ",FILE],Mess),
writeln(error,Mess),
Code = 2),
(nonvar(Code) ->
true
; open(FILE,read,S),
block((read(S,Goal) ->
true
; exit_block(syntax)),
TagRead,
(writeln(error,'ERROR'(FILE):TagRead),
Code = 2)),
close(S)),
(nonvar(Code) ->
true
; term_variables(Goal,Vars),
(foreach(Var,Vars),
foreach((SVar,Var),Bindings) do
open(string(""),write,Stream),
write(Stream,Var),
get_stream_info(Stream,name,SVar),
close(Stream)),
(occurs(solve_cstrs,Goal) ->
% on le retire du but
findall(Path,cgiveInstancePath(solve_cstrs,Goal,Path),Paths),
(foreach(Path,Paths),
param(Goal) do
creplace_at_path_in_term(Path,Goal,true))
; true),
(occurs(no_solve,Goal) ->
% no_solve prioritaire a solve_cstrs
setval(solve,0)
; setval(solve,1)),
block((getval(solve,0) ->
% les or, and ... ne sont pas transformes
% en ",", ";" ...
(call(Goal) ->
(current_suspension(_) ->
writeln(output,'UNKNOWN':no_solve),
Code = 3
; Code = 1,
writeln(output,'SAT'),
SAT = 1),
(nonvar(Test) ->
true
; (nonvar(SAT) ->
dump_binding(Test,NBindings)
; get_goals(LSusp,LinSusps,Goals),
term_variables(Bindings,ProtectedVars),
fold_goals(Goals,Goals,ProtectedVars,NewGoals),
term_variables(NewGoals,GVars0),
(foreach(GVar0,GVars0),
fromto([],I,O,GVars),
param(NBindings) do
(occurs(GVar0,NBindings) ->
O = I
; O = [GVar0|I])),
(foreach(GVar,GVars),
foreach((GSVar,GVar),GBindings) do
open(string(""),write,Stream),
write_term(Stream,GVar,
[attributes(none)]),
get_stream_info(Stream,name,GSVar),
close(Stream)),
type_bindings(Test,GBindings,NGBindings),
dump_binding(Test,NBindings),
dump_binding(Test,NGBindings),
nl(output),
writeln(output,'CONSTRAINTS:'),
(foreach(TGoal,NewGoals) do
write_term(output,TGoal,
[as(goal),depth(full),
attributes(none)]),
nl(output))))
; writeln(output,'UNSAT'),
Code = 0)
; getval(time_limit,Timeout),
alarm(Timeout),
((call(Goal),
type_bindings(Test,Bindings,NBindings),
solve_cstrs)
->
alarm(0),
writeln(output,'SAT'),
(nonvar(Test) ->
true
; nl(output),
dump_binding(Test,NBindings)),
Code = 1
; alarm(0),
writeln(output,'UNSAT'),
Code = 0)),
Tag,
(Tag == timeout_col ->
writeln(output,'UNKNOWN':timeout),
Code = 3
; writeln(error,'ERROR'(FILE):Tag),
Code = 2))).
type_bindings(1,_,_) ?- !.
type_bindings(Test,Bindings,NBindings) :-
(foreach((SVar,Var),Bindings),
foreach((SVar,Type,Var),NBindings) do
get_type(Var,Type)).
dump_binding(1,_) ?- !.
dump_binding(Test,Bindings) :-
set_flag(print_depth,1000),
(foreach((SVar,Type,Val0),Bindings) do
(var(Val0) ->
(Type == int ->
mfd:get_intervals(Val0,Val)
; mreal:get_intervals(Val0,LI),
(Type == float_simple ->
(foreach(I,LI),
foreach(NI,Val) do
(I = L..H ->
simple_float_to_string(L,SL),
simple_float_to_string(H,SH),
NI = SL..SH
; simple_float_to_string(I,NI)))
; ((Type == real,
check_rbox_rat(Val0,Rat))
->
term_string(Rat,SRat),
term_string(realString(SRat),Val)
; term_string(LI,Val))))
; (Type == float_simple ->
simple_float_to_string(Val0,Val)
; Val = Val0)),
writeln(output,SVar = Val)).
test_colibri :-
setval(bug,[]),
os_file_name("./Examples",OS_Examples),
read_directory(OS_Examples,"*",SubdirList,_),
(foreach(Dir,SubdirList),
fromto([],IS,OS,SatFileList),
fromto([],IU,OU,UnsatFileList),
fromto([],IUk,OUk,UnknownFileList) do
append_strings("./Examples/",Dir,SubDir),
os_file_name(SubDir,OS_SubDir),
read_directory(OS_SubDir, "*_unsat", _, UnsatList0),
(foreach(U,UnsatList0),
foreach(SU,UnsatList),
param(Dir) do
concat_string(["./Examples/",Dir,"/",U],SU0),
os_file_name(SU0,SU)),
read_directory(SubDir, "*_sat", _, SatList0),
(foreach(S,SatList0),
foreach(SS,SatList),
param(Dir) do
concat_string(["./Examples/",Dir,"/",S],SS0),
os_file_name(SS0,SS)),
read_directory(SubDir, "*_unknown", _, UnknownList0),
(foreach(Uk,UnknownList0),
foreach(SUk,UnknownList),
param(Dir) do
concat_string(["./Examples/",Dir,"/",Uk],SUk0),
os_file_name(SUk0,SUk)),
append(SatList,IS,OS),
append(UnsatList,IU,OU),
append(UnknownList,IUk,OUk)),
( member((List,Code0),[(SatFileList,1),(UnsatFileList,0),
(UnknownFileList,3)]),
member(F,List),
writeln(output,F),
%seed(0),
solve(1,F,6,Code),
(Code \== Code0 ->
writeln(output,ko:Code),
getval(bug,Bugs),
setval(bug,[F:Code|Bugs])
; writeln(output,ok)),
fail
; true),
getval(bug,Bugs),
(Bugs == [] ->
true
; nl(output),
writeln(output,"BUGS:"),
(foreach(B,Bugs) do
writeln(output,B))),
getval(cpt_solve,NbS)@colibri,
writeln(output,"NbSimplex":NbS).
smt_solve_get_stat(FILE) :-
% On passe en mode comptage du nombre de steps
setval(step_stats,1)@eclipse,
% Si on a une limite elle est donnée dans la ligne de commande
(current_array(step_limit,_) ->
true
; setval(step_limit,0)@eclipse),
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
smt_solve(_,FILE,0,Code),
(getval(show_steps,1)@eclipse ->
getval(nb_steps,Steps)@eclipse,
writeln(output,"Steps":Steps)
; true),
exit(Code).
smt_solve_with_step_limit(FILE) :-
% On passe en mode comptage du nombre de steps
setval(step_stats,1)@eclipse,
setval(show_steps,1)@eclipse,
% Si on a une limite elle est donnée dans la ligne de commande
(current_array(step_limit,_) ->
true
; setval(step_limit,0)@eclipse),
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
smt_solve(_,FILE,0,Code),
exit(Code).
smt_solve_count_steps(FILE,TO) :-
setval(show_steps,1)@eclipse,
getval(use_delta,UD)@eclipse,
getval(use_simplex,US)@eclipse,
% On passe en mode comptage du nombre de steps
setval(step_stats,1)@eclipse,
% Si on a une limite elle est donnée dans la ligne de commande
(current_array(step_limit,_) ->
true
; setval(step_limit,0)@eclipse),
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
block((smt_solve(_,FILE,TO,Code) ->
true
; setval(use_delta,UD)@eclipse,
setval(use_simplex,US)@eclipse,
fail),
Tag,
(writeln(output,exit(Tag)),
setval(use_delta,UD)@eclipse,
setval(use_simplex,US)@eclipse,
exit_block(Tag))),
setval(use_delta,UD)@eclipse,
setval(use_simplex,US)@eclipse.
smt_comp_solve(FILE) :-
% pas de message sur error pour la smtcomp
get_stream(null,Snull),
set_stream(error,Snull),
% on compte les steps pour desactiver deltas/simplex
setval(step_stats,1)@eclipse,
setval(step_limit,0)@eclipse,
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
% on desactive les warning de dolmen
setval(no_dolmen_warning,1)@eclipse,
smt_solve(_,FILE,0,Code),
exit(Code).
smt_solve(FILE) :-
setval(step_stats,0)@eclipse,
setval(step_limit,0)@eclipse,
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
% on active les warning de dolmen
setval(no_dolmen_warning,0)@eclipse,
smt_solve(_,FILE,0,Code),
exit(Code).
smt_solve(Test,FILE,TO,Code) :-
no_3B,
set_threshold(1e-3),
smt_solve_bis(Test,FILE,TO,Code).
smt_solve_bis(Test,FILE,TO,Code) :-
% seed(0),
setval(smt_status,unknown)@eclipse,
setval(nb_steps,0)@eclipse,
setval(simplex_steps,0)@eclipse,
setval(solve,1),
setval(time_limit,0),
%setval(smt_status,0),
(nonvar(Test) ->
setval(scrambler,1)
; setval(scrambler,0)),
setval(diag_code,0),
min_max_lazy(int,MinInt,MaxInt,_),
setval(refutation_chk,0)@eclipse,
setval(logic,"ALL")@eclipse,
% les deltas sont utiles pour les tableaux
% positionné par smt_interp0, lu dans solve.pl
setval(keep_deltas_if_arrays,0)@eclipse,
((exists(FILE),
get_file_info(FILE, readable, on))
->
true
; concat_string(["(error \"Cannot read input file ",FILE,"\")"],Mess),
writeln(output,Mess),
writeln(output,unknown),
Code = 2,
setval(diag_code,(unknown,2))),
(nonvar(Code) ->
true
; block((smt_interp_file(FILE,Goal) ->
true
; exit_block(syntax)),
TagRead,
((TagRead == unsupported ->
Code = 5
; concat_string(["(error \"",FILE,":",TagRead,"\")"],Mess),
writeln(output,Mess),
Code = 2),
writeln(output,unknown),
setval(diag_code,(unknown,Code))))),
getval(use_delta,UD)@eclipse,
getval(use_simplex,US)@eclipse,
(nonvar(Code) ->
true
; save_goal_before_check_sat(Goal),
setval(time_limit,TO),
statistics(session_time,Start),
setval(start_solve,Start),
% Essai pour smt_comp : pas de delta/simplex apres DDSteps
getval(simplex_delay_deactivation,DDSteps)@eclipse,
smt_start_enable_delta_check(DDSteps),
((var(Test),
(TO > 0;
DDSteps == 0))
->
smt_disable_delta_check
; smt_enable_delta_check),
block((timeout(not not call(Goal),
TO,
exit_block(timeout_col))
->
getval(diag_code,(Diag,Code))
; % echec a la propagation
(Status == sat ->
Code = 2,
Diag = unknown,
writeln(output,unknown),
writeln(error,"wrong unsat")
; Code = 0,
Diag = unsat,
writeln(output,unsat)),
setval(diag_code,(Diag,Code))),
Tag,
(update_min_max_lazy_int(MinInt,MaxInt),
(Tag == timeout_col ->
(nonvar(Test) ->
writeln(output,'UNKNOWN':timeout)
; true),
Code = 3,
setval(diag_code,(timeout,3))
; (concat_string(["(error \"",FILE,":",Tag,"\")"],Mess),
writeln(error,Mess),
writeln(output,unknown),
Code = 2,
setval(diag_code,(unknown,2))))))),
% Menage
clear_dep_constraints,
setval(use_delta,UD)@eclipse,
setval(use_simplex,US)@eclipse,
update_min_max_lazy_int(MinInt,MaxInt).
:- local reference(gsat).
goal_before_check_sat((Beg,G),Goal) ?- !,
(occurs(check_sat,G) ->
(G == check_sat ->
Goal = Beg
; Goal = (Beg,EGoal),
goal_before_check_sat(G,EGoal))
; goal_before_check_sat(Beg,Goal)).
goal_before_check_sat(_,true).
get_type_decl((Beg,End),Decl,Goal) ?- !,
get_type_decl(Beg,BDecl,BGoal),
get_type_decl(End,EDecl,EGoal),
make_conj(BDecl,EDecl,Decl),
append(BGoal,EGoal,Goal).
get_type_decl(D,Decl,Goal) ?-
(is_decl(D) ->
Decl = D,
Goal = []
; Decl = true,
Goal = [D]).
is_decl(int_vars(_,_)) ?- !.
is_decl(bool_vars(_,_)) ?- !.
is_decl(sort_vars(_,_)) ?- !.
is_decl(real_vars(_,_)) ?- !.
is_decl(rnd_vars(_)) ?- !.
is_decl(array_vars(_,_,_)) ?- !.
% pour check_sat_vars
save_goal_before_check_sat(Goal) :-
goal_before_check_sat(Goal,NGoal0),
get_type_decl(NGoal0,Decl,NGoal),
% Les variables de Decl sont attribuees
% par leur type
call(Decl),
% Les CGVars ne contiennent que des variables
% attribuees (donc celles de Decl normalement ?)
copy_term(NGoal,CG,CGVars),
(foreach([V|CV],CGVars),
foreach((V,Type,CV),TCGVars) do
get_variable_type(V,Type)),
setval(gsat,CG-TCGVars).
initNbCodes :-
setval(nbFile,0),
setval(nb0,0),
setval(nb1,0),
setval(nb2,0),
setval(nb3,0),
setval(nb4,0),
setval(nb5,0),
setval(nb6,0).
incNbCode(0) :-
incval(nb0).
incNbCode(1) :-
incval(nb1).
incNbCode(2) :-
incval(nb2).
incNbCode(3) :-
incval(nb3).
incNbCode(4) :-
incval(nb4).
incNbCode(5) :-
incval(nb5).
incNbCode(6) :-
incval(nb6).
smt_solve_test(FILE,TO) :-
seed(0),
smt_solve_test_bis(FILE,TO,Code),
exit(Code).
smt_solve_test_bis(FILE,TO,Code) :-
set_threshold(1e-3),
setval(cpt_solve,0)@colibri,
smt_solve_bis(1,FILE,TO,ICode),
getval(diag_code,(Diag,Code0)),
(ICode == 3 ->
% timeout
Code = 3
; getval(smt_status,Status0),
((Diag == wrong_sat,
Status = Diag;
Diag \== unknown,
Status0 \== unknown,
Status0 \== 0,
Status0 \== Diag,
Status = Status0)
->
Code = 2,
writeln(output,FILE:ko:Status)
; Code = Code0,
writeln(output,FILE:ok))),
(getval(use_simplex,1) ->
getval(cpt_solve,NbS)@colibri,
writeln(output,"NbSimplex":NbS)
; true).
% pour tester l'installation colibri
smt_test :-
StrDir = "./Examples/QF_FP/schanda/spark/",
smt_test0(5,1000,StrDir).
smt_test(TO,Size) :-
%StrDir = "./colibri-master-tests/tests/",
%StrDir = "./colibri-master-tests/tests/sat/", %0 (sans real/float-> int!)
StrDir = "./colibri-master-tests/tests/unsat/", %0
%StrDir = "./colibri-master-tests/tests/unknown/",
%StrDir = "./smt/",
%StrDir = "./AdaCore/",
%StrDir = "./AdaCore/smt/",
%StrDir = "./QF_LRA/2017-Heizmann-UltimateInvariantSynthesis/",
%StrDir = "./QF_LRA/DTP-Scheduling/",
%StrDir = "./QF_LRA/LassoRanker/",
%StrDir = "./QF_LRA/latendresse/",
%StrDir = "./QF_LRA/miplib/",
%StrDir = "./QF_LRA/check/", %OK
%StrDir = "./QF_LRA/keymaera/", %OK
%StrDir = "./QF_LRA/meti-tarski/", %OK
%StrDir = "./QF_LRA/sal/",
%StrDir = "./QF_LRA/sc/",
%StrDir = "./QF_LRA/spider_benchmarks/",
%StrDir = "./QF_LRA/TM/",
%StrDir = "./QF_LRA/tropical-matrix/",
%StrDir = "./QF_LRA/uart/",
%StrDir = "./QF_LRA/tta_startup/",
%StrDir = "./smtlib_schanda-master/crafted/",
%StrDir = "./smtlib_schanda-master/crafted/QF_FP/",
%StrDir = "./smtlib_schanda-master/crafted/QF_FPBV/",
%StrDir = "./smtlib_schanda-master/crafted/QF_FPLRA/",
%StrDir = "./smtlib_schanda-master/griggio/",
%StrDir = "./smtlib_schanda-master/nyxbrain/",
%StrDir = "./smtlib_schanda-master/nyxbrain/executable-tests/",
%StrDir = "./smtlib_schanda-master/nyxbrain/crafted-edge-cases/",
%StrDir = "./smtlib_schanda-master/random/fp.from.real/",
%StrDir = "./smtlib_schanda-master/random/",
%StrDir = "./smtlib_schanda-master/random/fp.from.real/",
%StrDir = "./smtlib_schanda-master/random/fp.fma/",
%StrDir = "./smtlib_schanda-master/random/fp.to.ubv/",
%StrDir = "./smtlib_schanda-master/random/fp.add/",
%StrDir = "./smtlib_schanda-master/random/fp.eq/",
%StrDir = "./smtlib_schanda-master/random/fp.gt/",
%StrDir = "./smtlib_schanda-master/random/fp.geq/",
%StrDir = "./smtlib_schanda-master/random/fp.leq/",
%StrDir = "./smtlib_schanda-master/random/fp.lt/",
%StrDir = "./smtlib_schanda-master/random/fp.from.ubv/",
%StrDir = "./smtlib_schanda-master/random/fp.from.sbv/",
% declare-datatypes ????
%StrDir = "./smtlib_schanda-master/spark_2014/",
%StrDir = "./smtlib_schanda-master/wintersteiger/",
%StrDir = "./Examples/QF_FP/schanda/spark/",
%StrDir = "./totest/",
%StrDir = "./AdaCore/",
%------------------------------------------------------------------------
%StrDir = "./QF_BV/",
%StrDir = "./QF_BV/20170501-Heizmann-UltimateAutomizer/",% 0
%StrDir = "./QF_BV/20170531-Hansen-Check/", % 0
%StrDir = "./QF_BV/2017-BuchwaldFried/",% 3/4
%StrDir = "./QF_BV/2018-Goel-hwbench/",% 11/11
%StrDir = "./QF_BV/2019-Mann/",% 2/2
%StrDir = "./QF_BV/2019-Wolf-fmbench/",% 14/14
%StrDir = "./QF_BV/20200415-Yurichev/",% 1/1
%StrDir = "./QF_BV/bmc-bv-svcomp14/",% 14/32
%StrDir = "./QF_BV/calypto/",% 20/23
%StrDir = "./QF_BV/challenge/",% 1/2
%StrDir = "./QF_BV/check2/",% 0/6
%StrDir = "./QF_BV/dwp_formulas/",% 0/332
%StrDir = "./QF_BV/ecc/", % 7/8
%StrDir = "./QF_BV/float/",% 182/209
%StrDir = "./QF_BV/galois/", % 2 BUGS / 4 fich (unknown)
%StrDir = "./QF_BV/gulwani-pldi08/",
%StrDir = "./QF_BV/log-slicing/",
%StrDir = "./QF_BV/mcm/",
%StrDir = "./QF_BV/pipe/",
%StrDir = "./QF_BV/pspace/",
%StrDir = "./QF_BV/rubik/",
%StrDir = "./QF_BV/RWS/",
%StrDir = "./QF_BV/sage/",
%StrDir = "./QF_BV/spear/",
%StrDir = "./QF_BV/stp_samples/",
%StrDir = "./QF_BV/tacas07/",
%StrDir = "./QF_BV/uclid/",
%StrDir = "./QF_BV/uclid_contrib_smtcomp09/",
%StrDir = "./QF_BV/uum/",
%StrDir = "./QF_BV/VS3/",
%StrDir = "./QF_BV/wienand-cav2008/",
%StrDir = "./QF_BV/asp/",
%StrDir = "./QF_BV/bench_ab/",%OK
%StrDir = "./QF_BV/bmc-bv/",
%StrDir = "./QF_BV/bmc-bv-svcomp14/",
%StrDir = "./QF_BV/brummayerbiere/",
%StrDir = "./QF_BV/brummayerbiere2/",
%StrDir = "./QF_BV/brummayerbiere3/",
%StrDir = "./QF_BV/brummayerbiere4/",
%StrDir = "./QF_BV/bruttomesso/", % plein de TO
%StrDir = "./QF_BV/crafted/",
%-----------------------------------------------------------------------
%StrDir = "./QF_AUFBVFP/20210301-Alive2/",% 1 (durdur)
%-----------------------------------------------------------------------
%StrDir = "QF_ABVFP/20170428-Liew-KLEE/imperial_svcomp_float-benchs_svcomp_mea8000.x86_64/", %0
%StrDir = "QF_ABVFP/20170428-Liew-KLEE/imperial_synthetic_non_terminating_klee_bug.x86_64/", % 0
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/aachen_real_gmp_gmp_klee_mul.x86_64/", % 3 (bitwuzla 0)
%StrDir = "QF_ABVFP/20170428-Liew-KLEE/aachen_real_numerical_recipes_qrdcmp.x86_64/",
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/", % 106 (177 unsupported) (cvc4 55)
%StrDir = "./QF_ABVFP/20170501-Heizmann-UltimateAutomizer/", % 0 min_solve (cvc4 0) OK
%----------------------------------------------------------------------
%StrDir = "./QF_ABVFPLRA/20190429-UltimateAutomizerSvcomp2019/",% 0 (cvc4 1|2)!
%StrDir = "./QF_ABVFPLRA/20170501-Heizmann-UltimateAutomizer/",% 0 (0)
%--------------------------------------------------------------------------
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/aachen_real_numerical_recipes_qrdcmp.x86_64/",
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/imperial_synthetic_sqrt_klee.x86_64/", % 3 (bitwuzla 3)
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/aachen_syn_halve_longdouble-flow.x86_64/",% 4u
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/", % 17 (cvc4 50)(bitwuzla
% 15)(89 u)(11 20mn)
%StrDir = "./QF_BVFP/20170501-Heizmann-UltimateAutomizer/", % 0 (bitwuzla 0)
%StrDir = "./QF_BVFP/ramalho/", % 0 TO (bitwuzla 0)
%StrDir = "./QF_BVFP/schanda/spark/", % 1 sans -> int (quake)
% (bitwuzla 1) (le passage en int casse les deltas)
%----------------------------------------------------------------
%StrDir = "./QF_BVFPLRA/20170501-Heizmann-UltimateAutomizer/", % 0 (cvc4 0)
%StrDir = "./QF_BVFPLRA/20190429-UltimateAutomizerSvcomp2019/", % 9 + 11u (cvc4 17 + 11u sinon 0u avec --fp-exp?))
%StrDir = "./QF_BVFPLRA/2019-Gudemann/", % 0 (cvc4 1)
%----------------------------------------------------------------
%StrDir = "./QF_FPLRA/20170501-Heizmann-UltimateAutomizer/", % 0 (cvc4 0)
%StrDir = "./QF_FPLRA/20190429-UltimateAutomizerSvcomp2019/", % 0 (cvc4 0)
%StrDir = "./QF_FPLRA/2019-Gudemann/", % 2 (cvc4 7)
%StrDir = "./QF_FPLRA/schanda/", % 0 (cvc4 0)
%----------------------------------------------------------------
%StrDir = "./QF_FP/20170501-Heizmann-UltimateAutomizer/", % 0
%StrDir = "./QF_FP/20190429-UltimateAutomizerSvcomp2019/",% 0 (bitwuzla 0)
%StrDir = "./QF_FP/ramalho/", % 0! (cvc4 19)(bitwuzla 17)
%StrDir = "./QF_FP/griggio/", % 50 (min_solve, sans lin_solve ni ls_reduce..)(39)
%(cvc4 89)(bitwuzla 74) LES DD DEMARRENT TROP VITE ?
%StrDir = "./QF_FP/schanda/spark/", % 6 (min_solve avec X =< (X+Y)/2 =< Y) (ncvc4 8)(bitwuzla 3)
%StrDir = "./QF_FP/wintersteiger/", % tout OK
%-----------------------------------------------------------------------
%StrDir = "./QF_UFFP/schanda/",% 0
%-----------------------------------------------------------------
%StrDir = "./QF_UF/", % 426 (pour 1061)
%----------------------------------------------------------------
%StrDir = "./QF_AUFBV/", %
%----------------------------------------------------------------
%StrDir = "./QF_UFIDL/", % 290 (pour 329)
%----------------------------------------------------------------
%StrDir = "./QF_UFLIA/", % 104 (pour 129)
%----------------------------------------------------------------
%StrDir = "./QF_UFLRA/", % 141 (pour 384)
%----------------------------------------------------------------
%StrDir = "./QF_ABV/bench_ab/",%1
%StrDir = "./QF_ABV/bmc-arrays/",%10(9 core)
%-----------------------------------------------------------------
%StrDir = "QF_AX/",
%StrDir = "QF_AX/storeinv/", % 4
%StrDir = "QF_AX/swap/", % 8 -> 15
%StrDir = "QF_AX/storecomm/", % 0
%StrDir = "QF_AX/cvc/", % 0
%StrDir = "QF_ALIA/qlock2/", % Des TO et core dump
%StrDir = "QF_ALIA/cvc/", % 3
%StrDir = "QF_ALIA/UltimateAutomizer2/",% des TO
%StrDir = "QF_ALIA/piVC/", % 11
%StrDir = "QF_ALIA/ios/", % 26
%StrDir = "QF_NIA/20170427-VeryMax/", Que des TO
%StrDir = "QF_NIA/AProVE/",
%StrDir = "QF_NIA/calypto/", %OK
%StrDir = "QF_NIA/LassoRanker/",%OK mieux en real_int qu'en int !!
%StrDir = "QF_NIA/LCTES/",%TO
%StrDir = "QF_NIA/leipzig/",
%StrDir = "QF_NIA/mcm/",%TO
%StrDir = "QF_NIA/UltimateAutomizer/",%OK
%StrDir = "QF_NIA/UltimateLassoRanker/",%TO
%StrDir = "QF_LIA/20180326-Bromberger/",
%StrDir = "QF_LIA/cut_lemmas/", %TO
%StrDir = "QF_LIA/wisa/", %TO
%StrDir = "QF_LIA/arctic-matrix/", %TO
%StrDir = "QF_LIA/check/", %OK + TO
%StrDir = "QF_LIA/RTCL/", %OK
%StrDir = "QF_LIA/miplib2003/", %TO
%StrDir = "QF_LIA/rings_preprocessed/", %TO
%StrDir = "QF_LIA/mathsat/", %TO
%StrDir = "QF_LIA/CAV_2009_benchmarks/smt/", %TO
%StrDir = "QF_LIA/rings/", %TO
%StrDir = "QF_LIA/fft/", %TO
%StrDir = "QF_ANIA/",% Unsupported ou TO
%StrDir = "QF_ABV/bmc-arrays/",
%StrDir = "QF_AFPBV/dwp_formulas/", %TRES DUR
smt_test0(TO,Size,StrDir).
:- lib(timeout).
read_file_list(SmtFileList) :-
(at_eof(tataS) ->
close(tataS),
SmtFileList = []
; SmtFileList = [F| NSmtFileList],
read_string(tataS,end_of_line,_,F),
read_file_list(NSmtFileList)).
smt_test0(TO,Size,StrDir) :-
setval(bug,[]),
setval(cpt_solve,0)@colibri,
os_file_name(StrDir,OS_Examples),
(StrDir == "./QF_FP/wintersteiger/" ->
read_directory(OS_Examples,"*/*",SubdirList0,_)
; read_directory(OS_Examples,"*",SubdirList0,_)),
(SubdirList0 == [] ->
SubdirList = ["."]
; SubdirList = SubdirList0),
(foreach(Dir,SubdirList),
fromto([],IS,OS,SmtFileList),
param(StrDir) do
append_strings(StrDir,Dir,SubDir),
os_file_name(SubDir,OS_SubDir),
read_directory(OS_SubDir, "*.smt2", _, SmtList),
(foreach(F,SmtList),
fromto(IS,I,O,OS),
param(SubDir) do
concat_string([SubDir,"/",F],PF),
os_file_name(PF,OS_PF),
O = [OS_PF|I])),
initNbCodes,
get_flag(version_as_list,[Ver|_]),
((Ver == 7) ->
ECLIPSE = eclipse7,
COL = "col_solve.eco"
; ECLIPSE = eclipse,
COL = "col_solve.pl"),
get_flag(hostarch,ARCH),
((ARCH == "i386_nt";
ARCH == "x86_64_nt")
->
Windows = 1
; true),
/*
open(tata,read,tataS),
read_file_list(SmtFileList),
*/
length(SmtFileList,NbFiles),
setval(nbTO,0),
( member(F,SmtFileList),
incval(nbFile),
getval(nbFile,NumF),
getval(nbTO,NbTO),
writeln(output,F:NumF/NbFiles-'TO':NbTO),
concat_atom([Size,'M'],SizeM),
(nonvar(Windows) ->
get_flag(installation_directory,EDIR),
os_file_name(OF,F),
concat_string(["cmd.exe /D /C smt_test_file ",OF," ",TO],Com)
; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s ",ECLIPSE," -b ",COL," -g ",SizeM," -e \"seed(0),use_delta,use_simplex,setval(def_real_for_int,1)@colibri,setval(step_limit,0),setval(no_dolmen_warning,1)@eclipse,setval(show_steps,1),smt_solve_get_stat(\'",F,"\')\""],Com)),
% ; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s ",ECLIPSE," -b ",COL," -g ",SizeM," -e \"seed(0),smt_comp_solve(\'",F,"\')\""],Com)),
%; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s cvc4 ",F],Com)),
%; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s ncvc4 --fp-exp ",F],Com)),
%; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s z3 ",F],Com)),
%; concat_string(["timeout --signal=KILL --kill-after=0.1 ",TO,"s bitwuzla ",F],Com)),
exec(Com,[],Pid),
wait(Pid,CodeExt),
writeln(code:CodeExt),
(CodeExt == 0 ->
% unsat
Code = 0
; ((CodeExt == 256;
CodeExt == 1)
->
% sat 1*256
Code = 1
; ((CodeExt == 9;
CodeExt == 3)
->
% timeout
Code = 3,
incval(nbTO)
; (CodeExt == 11 ->
% core dump
Code = 4
; (CodeExt == 512 ->
% erreur ou wrong_sat/wrong_unsat ou bug 2*256
Code = 2
; (CodeExt == 1536 ->
% Step limit reached: 6*256
Code = 6
; % unsupported 5*256=1280
Code = 5)))))),
incNbCode(Code),
(Code == 2 ->
%halt,
getval(bug,Bugs),
setval(bug,[F|Bugs])
; true),
fail
; true),
getval(nbFile,NbFile),
writeln(output,"Files":NbFile),
getval(nb0,Nb0),
writeln(output,"Unsat":Nb0),
getval(nb1,Nb1),
writeln(output,"Sat":Nb1),
getval(nb2,Nb2),
writeln(output,"Error":Nb2),
getval(nb6,Nb6),
writeln(output,"Step limit":Nb6),
getval(nb3,Nb3),
writeln(output,"Timeout":Nb3),
getval(nb4,Nb4),
writeln(output,"Core dump":Nb4),
getval(nb5,Nb5),
writeln(output,"Unsupported":Nb5),
getval(bug,Bugs),
(Bugs == [] ->
true
; nl(output),
writeln(output,"BUGS:"),
(foreach(B,Bugs) do
writeln(output,B))).
smt_unit_test(TO) :-
setval(bug,[]),
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/imperial_svcomp_float-benchs_svcomp_mea8000.x86_64/",
%StrDir = "./smtlib_schanda-master/random/", % tout OK ou unsupported
%StrDir = "./smtlib_schanda-master/random/fp.from.real/",
%StrDir = "./smtlib_schanda-master/random/fp.fma/",
%StrDir = "./smtlib_schanda-master/random/fp.div/",
%StrDir = "./smtlib_schanda-master/random/fp.mul/",
%StrDir = "./smtlib_schanda-master/nyxbrain/",
%StrDir = "./smtlib_schanda-master/spark_2014/",
%------------------------------------------------------------------------
%StrDir = "./QF_ABVFPLRA/20190429-UltimateAutomizerSvcomp2019/",% 2-3 (4)
%StrDir = "./QF_ABVFPLRA/20170501-Heizmann-UltimateAutomizer/",% 0-1 (0)
%------------------------------------------------------------------------
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/", % 79 TO (69 sans simplex) (cvc4 76)
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/aachen_real_gmp_gmp_klee_mul.x86_64/",
%StrDir = "./QF_ABVFP/20170501-Heizmann-UltimateAutomizer/", % 0 TO
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/imperial_synthetic_count_klee_bug.x86_64/", % 6 TO/9! (cvc4 0)
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/imperial_synthetic_count_klee.x86_64/", % 3/87! (0)
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/aachen_real_sorting_full_sym_floats.x86_64/", % 2
%StrDir = "./QF_ABVFP/20170428-Liew-KLEE/aachen_real_sorting_doubles.x86_64/", % 10/58
%------------------------------------------------------------------------
%StrDir = "./QF_BVFP/",
%StrDir = "./QF_BVFP/20170428-Liew-KLEE/", % 33-76 ()
%StrDir = "./QF_BVFP/20170501-Heizmann-UltimateAutomizer/", % 0 TO
%StrDir = "./QF_BVFP/20190429-UltimateAutomizerSvcomp2019/",% 1
%StrDir = "./QF_BVFP/ramalho/", % 0 TO
%StrDir = "./QF_BVFP/schanda/spark/", % 1 TO
%------------------------------------------------------------------------
%StrDir = "./QF_UFFP/schanda/spark/",% 0 TO
%------------------------------------------------------------------------
%StrDir = "./QF_FPLRA/20170501-Heizmann-UltimateAutomizer/",% 0 TO
%StrDir = "./QF_FPLRA/20190429-UltimateAutomizerSvcomp2019/",% 0 TO
%StrDir = "./QF_FPLRA/schanda/spark/",% 1-0 TO
%StrDir = "./QF_FPLRA/2019-Gudemann/",% 2 (11)
%------------------------------------------------------------------------
%StrDir = "./QF_BVFPLRA/20170501-Heizmann-UltimateAutomizer/",% 0 TO
%StrDir = "./QF_BVFPLRA/20190429-UltimateAutomizerSvcomp2019/",% 15-11 (22)
%StrDir = "./QF_BVFPLRA/2019-Gudemann/",% 0 TO
%------------------------------------------------------------------------
%StrDir = "./QF_FP/20170501-Heizmann-UltimateAutomizer/", % 0 TO
%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/schanda/spark/",% 7 TO
StrDir = "./QF_FP/wintersteiger/", % 0 TO
%------------------------------------------------------------------------
%StrDir = "QF_AX/",
%StrDir = "QF_AX/storeinv/",
%StrDir = "QF_AX/swap/",
%StrDir = "QF_AX/storecomm/",
%StrDir = "QF_AX/cvc/",
%----------------------------------------------------------------------
%StrDir = "./QF_BV/",
%StrDir = "./QF_BV/20170501-Heizmann-UltimateAutomizer/",
%StrDir = "./QF_BV/20170531-Hansen-Check/", %OK
%StrDir = "./QF_BV/2017-BuchwaldFried/",
%StrDir = "./QF_BV/2018-Goel-hwbench/",
%StrDir = "./QF_BV/2019-Mann/",
%StrDir = "./QF_BV/2019-Wolf-fmbench/",
%StrDir = "./QF_BV/20200415-Yurichev/",
%StrDir = "./QF_BV/bmc-bv-svcomp14/",
%StrDir = "./QF_BV/calypto/",
%StrDir = "./QF_BV/challenge/",
%StrDir = "./QF_BV/check2/",
%StrDir = "./QF_BV/dwp_formulas/",
%StrDir = "./QF_BV/ecc/", % NULL comparé a cvc4
%StrDir = "./QF_BV/float/",
%StrDir = "./QF_BV/galois/", % 2 BUGS / 4 fich (unknown)
%StrDir = "./QF_BV/gulwani-pldi08/",
%StrDir = "./QF_BV/log-slicing/",
%StrDir = "./QF_BV/mcm/",
%StrDir = "./QF_BV/pipe/",
%StrDir = "./QF_BV/pspace/",
%StrDir = "./QF_BV/rubik/",
%StrDir = "./QF_BV/RWS/",
%StrDir = "./QF_BV/sage/",
%StrDir = "./QF_BV/sage2/",
%StrDir = "./QF_BV/spear/",
%StrDir = "./QF_BV/stp/",
%StrDir = "./QF_BV/stp_samples/",
%StrDir = "./QF_BV/tacas07/",
%StrDir = "./QF_BV/uclid/",
%StrDir = "./QF_BV/uclid_contrib_smtcomp09/",
%StrDir = "./QF_BV/uum/",
%StrDir = "./QF_BV/VS3/",
%StrDir = "./QF_BV/wienand-cav2008/",
%StrDir = "./QF_BV/asp/",
%StrDir = "./QF_BV/bench_ab/",%OK
%StrDir = "./QF_BV/bmc-bv/",
%StrDir = "./QF_BV/bmc-bv-svcomp14/",
%StrDir = "./QF_BV/brummayerbiere/",
%StrDir = "./QF_BV/brummayerbiere2/",
%StrDir = "./QF_BV/brummayerbiere3/",
%StrDir = "./QF_BV/brummayerbiere4/",
%StrDir = "./QF_BV/bruttomesso/", % plein de TO
%StrDir = "./QF_BV/crafted/",
%-----------------------------------------------------------------------
%StrDir = "QF_ABV/bench_ab/",
%StrDir = "QF_ABV/bmc-arrays/",
%StrDir = "QF_ABV/brummayerbiere/", %TROP DUR
%StrDir = "QF_ABV/btfnt/", %TROP DUR
%StrDir = "QF_ABV/calc2/", %TROP DUR
%StrDir = "QF_ABV/dwp_formulas/", %TRES DUR
%StrDir = "QF_ABV/ecc/", %TRES DUR
%StrDir = "QF_ABV/egt/",
%StrDir = "QF_ABV/jager/",
%StrDir = "QF_ABV/klee-selected-smt2/",
os_file_name(StrDir,OS_Examples),
((StrDir == "./QF_FP/wintersteiger/";
StrDir == "./QF_BVFP/schanda/spark/")
->
read_directory(OS_Examples,"*/*",SubdirList0,_)
; read_directory(OS_Examples,"*",SubdirList0,_)),
(SubdirList0 == [] ->
SubdirList = ["."]
; SubdirList = SubdirList0),
(foreach(Dir,SubdirList),
fromto([],IS,OS,SmtFileList),
param(StrDir) do
append_strings(StrDir,Dir,SubDir),
os_file_name(SubDir,OS_SubDir),
read_directory(OS_SubDir, "*.smt2", _, SmtList),
(foreach(F,SmtList),
fromto(IS,I,O,OS),
param(SubDir) do
concat_string([SubDir,"/",F],PF),
os_file_name(PF,OS_PF),
O = [OS_PF|I])),
initNbCodes,
setval(nbFile,0),
setval(nbTO,0),
setval(no_dolmen_warning,1)@eclipse,
getval(use_delta,UD)@eclipse,
getval(use_simplex,US)@eclipse,
length(SmtFileList,NFs),
( member(F,SmtFileList),
incval(nbFile),
getval(nbFile,NbF),
getval(nbTO,NbTO),
writeln(output,F:NbF/NFs-'TO':NbTO),
garbage_collect,
setval(cpt_solve,0)@colibri,
setval(use_delta,UD)@eclipse,
setval(use_simplex,US)@eclipse,
smt_solve_bis(1,F,TO,Code),
incNbCode(Code),
(Code == 2 ->
getval(bug,Bugs),
setval(bug,[F|Bugs])
; (Code == 3 ->
incval(nbTO)
; true)),
fail
; true),
getval(nbFile,NbFile),
writeln(output,"Files":NbFile),
getval(nb0,Nb0),
writeln(output,"Unsat":Nb0),
getval(nb1,Nb1),
writeln(output,"Sat":Nb1),
getval(nb2,Nb2),
writeln(output,"Error":Nb2),
getval(nb3,Nb3),
writeln(output,"Timeout":Nb3),
getval(nb5,Nb5),
writeln(output,"Unsupported":Nb5),
getval(bug,Bugs),
(Bugs == [] ->
true
; nl(output),
writeln(output,"BUGS:"),
(foreach(B,Bugs) do
writeln(output,B))).
smt_unit_test1 :-
setval(bug,[]),
setval(cpt_solve,0)@colibri,
StrDir = "./QF_BVFP/20170428-Liew-KLEE/",
os_file_name(StrDir,OS_Examples),
(StrDir == "./QF_FP/wintersteiger/" ->
read_directory(OS_Examples,"*/*",SubdirList0,_)
; read_directory(OS_Examples,"*",SubdirList0,_)),
(SubdirList0 == [] ->
SubdirList = ["."]
; SubdirList = SubdirList0),
(foreach(Dir,SubdirList),
fromto([],IS,OS,SmtFileList),
param(StrDir) do
append_strings(StrDir,Dir,SubDir),
os_file_name(SubDir,OS_SubDir),
read_directory(OS_SubDir, "*.smt2", _, SmtList),
(foreach(F,SmtList),
fromto(IS,I,O,OS),
param(SubDir) do
concat_string([SubDir,"/",F],PF),
os_file_name(PF,OS_PF),
O = [OS_PF|I])),
initNbCodes,
( member(F,SmtFileList),
incval(nbFile),
writeln(output,F),
smt_solve_test_bis(F,1,Code),
incNbCode(Code),
(Code == 2 ->
getval(bug,Bugs),
setval(bug,[F|Bugs])
; true),
fail
; true),
getval(nbFile,NbFile),
writeln(output,"Files":NbFile),
getval(nb0,Nb0),
writeln(output,"Unsat":Nb0),
getval(nb1,Nb1),
writeln(output,"Sat":Nb1),
getval(nb2,Nb2),
writeln(output,"Error":Nb2),
getval(nb6,Nb6),
writeln(output,"Step limit":Nb6),
getval(nb3,Nb3),
writeln(output,"Timeout":Nb3),
getval(nb5,Nb5),
writeln(output,"Unsupported":Nb5),
getval(bug,Bugs),
(Bugs == [] ->
true
; nl(output),
writeln(output,"BUGS:"),
(foreach(B,Bugs) do
writeln(output,B))).
make_scripts :-
(get_flag(hostarch,"x86_64_nt") ->
make_scripts_windows
; make_scripts_unix).
make_scripts_windows :-
(exists('colibri.bat') ->
delete('colibri.bat')
; true),
(exists('test_colibri.bat') ->
delete('test_colibri.bat')
; true),
get_flag(cwd,COLDIR0),
os_file_name(COLDIR0,COLDIR),
writeln(output,"Making script colibri.bat"),
open('colibri.bat',write,colibri),
writeln(colibri,"@echo off"),
write(colibri,"set COLDIR="),
writeln(colibri,COLDIR),
writeln(colibri,"set PATH=%PATH%;%COLDIR%\\lib\\v7\\x86_64_nt"),
writeln(colibri,"set ECLIPSEDIR=%COLDIR%\\ECLiPSe"),
writeln(colibri,"set GOAL=\"solve('%1')\""),
writeln(colibri,"if \"%1\" == \"\" (set GOAL=\"solve('colibri.in')\")"),
% writeln(colibri,"@echo on"),
writeln(colibri,"\"%ECLIPSEDIR%\\lib\\x86_64_nt\\eclipse.exe\" -b"
" \"%COLDIR%\\compile_flag\" -b"
" \"%COLDIR%\\col_solve\" -g 2000M -e %GOAL%"),
close(colibri),
writeln(output,"Making script test_colibri.bat"),
open('test_colibri.bat',write,test_colibri),
writeln(test_colibri,"@echo off"),
write(test_colibri,"set COLDIR="),
writeln(test_colibri,COLDIR),
writeln(test_colibri,"set PATH=%PATH%;%COLDIR%\\lib\\v7\\x86_64_nt"),
writeln(test_colibri,"set ECLIPSEDIR=%COLDIR%\\ECLiPSe"),
% writeln(test_colibri,"@echo on"),
writeln(test_colibri,"\"%ECLIPSEDIR%\\lib\\x86_64_nt\\eclipse.exe\" -b"
" \"%COLDIR%\\compile_flag\" -b"
" \"%COLDIR%\\col_solve\" -g 2000M -e test_colibri"),
close(test_colibri),
writeln(output,"Making script smt_colibri.bat"),
open('smt_colibri.bat',write,smt_colibri),
writeln(smt_colibri,"@echo off"),
write(smt_colibri,"set COLDIR="),
writeln(smt_colibri,COLDIR),
writeln(smt_colibri,"set PATH=%PATH%;%COLDIR%\\lib\\v7\\x86_64_nt"),
writeln(smt_colibri,"set ECLIPSEDIR=%COLDIR%\\ECLiPSe"),
writeln(smt_colibri,"set GOAL=\"smt_solve('%1')\""),
writeln(smt_colibri,"if \"%1\" == \"\" (set GOAL=\"smt_solve('smt_colibri.in')\")"),
% writeln(smt_colibri,"@echo on"),
writeln(smt_colibri,"\"%ECLIPSEDIR%\\lib\\x86_64_nt\\eclipse.exe\" -b"
" \"%COLDIR%\\compile_flag\" -b"
" \"%COLDIR%\\col_solve\" -g 2000M -e %GOAL%"),
close(smt_colibri),
writeln(output,"Making script smt_test_colibri.bat"),
open('smt_test_colibri.bat',write,smt_test_colibri),
writeln(smt_test_colibri,"@echo off"),
write(smt_test_colibri,"set COLDIR="),
writeln(smt_test_colibri,COLDIR),
writeln(smt_test_colibri,"set PATH=%PATH%;%COLDIR%\\lib\\v7\\x86_64_nt"),
writeln(smt_test_colibri,"set ECLIPSEDIR=%COLDIR%\\ECLiPSe"),
% writeln(smt_test_colibri,"@echo on"),
writeln(smt_test_colibri,"\"%ECLIPSEDIR%\\lib\\x86_64_nt\\eclipse.exe\" -b"
" \"%COLDIR%\\compile_flag\" -b"
" \"%COLDIR%\\col_solve\" -g 2000M -e smt_test"),
close(smt_test_colibri),
writeln(output,"Making script smt_test_file.bat"),
open('smt_test_file.bat',write,smt_test_file),
writeln(smt_test_file,"@echo off"),
write(smt_test_file,"set COLDIR="),
writeln(smt_test_file,COLDIR),
writeln(smt_test_file,"set PATH=%PATH%;%COLDIR%\\lib\\v7\\x86_64_nt"),
writeln(smt_test_file,"set ECLIPSEDIR=%COLDIR%\\ECLiPSe"),
% writeln(smt_test_file,"@echo on"),
writeln(smt_test_file,"\"%ECLIPSEDIR%\\lib\\x86_64_nt\\eclipse.exe\" -b"
" \"%COLDIR%\\compile_flag\" -b"
" \"%COLDIR%\\col_solve\" -g 2000M -e \"no_simplex,smt_solve_test('%1',%2)\""),
close(smt_test_file).
make_scripts_unix :-
(exists('colibri.sh') ->
delete('colibri.sh')
; true),
(exists('test_colibri.sh') ->
delete('test_colibri.sh')
; true),
(exists('smt_colibri.sh') ->
delete('smt_colibri.sh')
; true),
(exists('smt_test_colibri.sh') ->
delete('smt_test_colibri.sh')
; true),
get_flag(cwd,COLDIR),
get_flag(hostarch,ARCH),
get_flag(installation_directory,ECLIPSEDIR),
writeln(output,"Making script colibri.sh"),
open('colibri.sh',write,colibri),
concat_string(["#!/bin/sh
FILE=$1
GOAL=\"solve('colibri.in')\"
if [ \"$FILE\" != \"\" ]
then
GOAL=\"solve('$FILE')\"
fi
COLDIR=",COLDIR,"
# Repertoire ECLiPSe Prolog
ECLIPSEDIR=",ECLIPSEDIR,"
ARCH=x86_64_linux
LD_LIBRARY_PATH=${ECLIPSEDIR}/lib/${ARCH}:$LD_LIBRARY_PATH
export ECLIPSEDIR ARCH LD_LIBRARY_PATH
# Chargement/demarrage de test_colibri
exec ${ECLIPSEDIR}/lib/${ARCH}/eclipse.exe -b ${COLDIR}/compile_flag -b ${COLDIR}/col_solve -g 2000M -e ${GOAL}"],COLIBRI),
writeln(colibri,COLIBRI),
close(colibri),
exec('chmod a+rx ./colibri.sh',[]),
writeln(output,"Making script smt_colibri.sh"),
open('smt_colibri.sh',write,smt_colibri),
concat_string(["#!/bin/sh
FILE=$1
GOAL=\"solve('smt_colibri.in')\"
if [ \"$FILE\" != \"\" ]
then
GOAL=\"smt_solve('$FILE')\"
fi
COLDIR=`/bin/pwd`
# Repertoire ECLiPSe Prolog
ECLIPSEDIR=${COLDIR}/ECLiPSe
ARCH=x86_64_linux
LD_LIBRARY_PATH=${ECLIPSEDIR}/lib/${ARCH}:$LD_LIBRARY_PATH
export ECLIPSEDIR ARCH LD_LIBRARY_PATH
# Chargement/demarrage de test_colibri
exec ${ECLIPSEDIR}/lib/${ARCH}/eclipse.exe -b ${COLDIR}/compile_flag -b ${COLDIR}/col_solve -g 2000M -e ${GOAL}"],SMTCOLIBRI),
writeln(smt_colibri,SMTCOLIBRI),
close(smt_colibri),
exec('chmod a+rx ./smt_colibri.sh',[]),
writeln(output,"Making script test_colibri.sh"),
open('test_colibri.sh',write,test_colibri),
concat_string(["#!/bin/sh
COLDIR=`/bin/pwd`
# Repertoire ECLiPSe Prolog
ECLIPSEDIR=",ECLIPSEDIR,"
ARCH=x86_64_linux
LD_LIBRARY_PATH=${ECLIPSEDIR}/lib/${ARCH}:$LD_LIBRARY_PATH
export ECLIPSEDIR ARCH LD_LIBRARY_PATH
# Chargement/demarrage de test_colibri
exec ${ECLIPSEDIR}/lib/${ARCH}/eclipse.exe -b ${COLDIR}/compile_flag -b ${COLDIR}/col_solve -g 2000M -e test_colibri"],TestCOLIBRI),
writeln(test_colibri,TestCOLIBRI),
close(test_colibri),
exec('chmod a+rx ./test_colibri.sh',[]),
writeln(output,"Making script smt_test_colibri.sh"),
open('smt_test_colibri.sh',write,smt_test_colibri),
concat_string(["#!/bin/sh
COLDIR=",COLDIR,"
# Repertoire ECLiPSe Prolog
ECLIPSEDIR=",ECLIPSEDIR,"
ARCH=x86_64_linux
LD_LIBRARY_PATH=${ECLIPSEDIR}/lib/${ARCH}:$LD_LIBRARY_PATH
export ECLIPSEDIR ARCH LD_LIBRARY_PATH
# Chargement/demarrage de test_colibri
exec ${ECLIPSEDIR}/lib/${ARCH}/eclipse.exe -b ${COLDIR}/compile_flag -b ${COLDIR}/col_solve -g 2000M -e smt_test"],SMTTestCOLIBRI),
writeln(smt_test_colibri,SMTTestCOLIBRI),
close(smt_test_colibri),
exec('chmod a+rx ./smt_test_colibri.sh',[]).