with Ada.Containers.Ordered_Maps;
with Ada.Containers.Vectors;

with Iterators.From.Elements.Lists;
with Iterators.From.Ordered_Maps;
with Iterators.From.Vectors;
with Iterators.Generators.Arrays;
with Iterators.Operators;
with Iterators.Shebang;

package Iterators.Tests is

   --  Supporting instantiations:

   package Ints    is new From.Elements (Integer);
   package Strings is new From.Elements (String);
   package Int2str is new Operators (Ints.Iterators, Strings.Iterators);
   package Str2int is new Operators (Strings.Iterators, Ints.Iterators);

   package Chars is new Shebang (Character);

   package Int_Lists is new Ints.Lists;

   package Int_Maps      is new Ada.Containers.Ordered_Maps (Positive, Integer);
   package Int_Map_Iters is new From.Ordered_Maps (Int_Maps);

   package Int_Vectors   is new Ada.Containers.Vectors (Positive, Integer);
   package Int_Vec_Iters is new From.Vectors (Int_Vectors);

   package Arrs is new Generators.Arrays (Any_Index   => Positive,
                                          Any_Element => Integer,
                                          Root        => Ints.Iterators);

   subtype Number_Array is Arrs.Element_Array;

   --  Supporting subprograms:

   function Add (L, R : Integer) return Integer is (L + R);

   procedure Check (It : Ints.Iterators.Iterator'Class;
                    Ok : Number_Array);

   function Double (I : Integer) return Integer is (I * 2);

   function Image (I : Integer) return String is (Integer'Image (I));

   function Is_Odd (I : Integer) return Boolean is (I mod 2 = 1);

   function Value (S : String) return Integer is (Integer'Value (S));

end Iterators.Tests;
