-- Demonstrates if and case expressions
-- The expression must be inside parentheses

with ada.text_io; use ada.text_io; 
with ada.integer_text_io; use ada.integer_text_io; 
 
procedure if_expression  is 
   n: Natural;
   an_even: Natural;

   i: Integer;
   minus_one__zero_or_one: Natural range -1 .. 1;
begin
   -- Read values:
   get(n);
   get(i);

   -- Calculate values:
   an_even := (if n mod 2 = 0 then n else n + 1);
   -- if n is even then an_even is n.  
   -- If n is odd then an_even number is n+1

   minus_one__zero_or_one := 
      (case i is Integer'first .. -1 => -1,
                                   0 => 0,
                 1 .. Integer'last => -1);


   -- Assign minus_one__zero_or_one to -1, 0, or 1
   -- depending on whether i is negative, 0, or positive.
   -- Of course, there are other ways to do this!


   -- Print values"
   put_line(n'img & an_even'img);
   put_line(i'img & minus_one__zero_or_one'img);

   -- Calculate and print in one statement
   put(if n mod 2 = 0 then n else n + 1);
   --  Demonstrates that parens from put provide parens for if expression
end if_expressionfoo;