with text_io,integer_io; use text_io,integer_io;
with Standard_Floating_Numbers_io; use Standard_Floating_Numbers_io;
with Standard_Complex_Numbers; use Standard_Complex_Numbers;
with Standard_Complex_Numbers_io; use Standard_Complex_Numbers_io;
with Standard_Complex_Vectors; use Standard_Complex_Vectors;
with Standard_Complex_Vectors_io; use Standard_Complex_Vectors_io;
with Standard_Integer_VecVecs; use Standard_Integer_VecVecs;
with Standard_Integer_VecVecs_io; use Standard_Integer_VecVecs_io;
with Standard_Complex_Solutions; use Standard_Complex_Solutions;
with Standard_Complex_Solutions_io; use Standard_Complex_Solutions_io;
with Binomial_System_Solvers; use Binomial_System_Solvers;
procedure ts_binsolve is
-- DESCRIPTION :
-- Test on the solver of binomial systems.
ans : character;
n : natural;
procedure put_Bar is
begin
for i in 1..50 loop
put('*');
end loop;
new_line;
end put_Bar;
procedure put ( n : in natural; v : in Vector; sols : in Solution_List ) is
tmp : Solution_List;
s : Solution(n);
nb : natural;
begin
tmp := sols;
nb := 1;
while not Is_Null(tmp) loop
s := Head_Of(tmp).all;
put_Bar;
put("Solution number "); put(nb,1); put_line(" :"); put(s);
put("The residual : "); put(REAL_PART(v(nb))); new_line;
nb := nb + 1;
put_Bar;
tmp := Tail_Of(tmp);
end loop;
end put;
begin
loop
put("Give the dimension : "); get(n);
declare
vv : VecVec(1..n);
cv : Standard_Complex_Vectors.Vector(1..n);
sols : Solution_List;
begin
put("Give "); put(n,1); put(' '); put_line("integer vectors :");
get(n,vv);
put_line("Give a vector of nonzero constants : ");
get(cv);
Solve(vv,cv,n,sols);
declare
nb : natural := Length_Of(sols);
res : Standard_Complex_Vectors.Vector(1..nb);
begin
Residuals(vv,cv,n,sols,res);
put("There are "); put(nb,1); put_line(" solutions :");
put(n,res,sols);
end;
Clear(sols);
end;
put("Do you want more tests ? (y/n) "); get(ans);
exit when ans /= 'y';
end loop;
end ts_binsolve;