I have a problem with a 'simple' ADA program. This exercise aim at learning value by reference and post condition in ADA.
Here I want to build a simple function that sum two Integers where the first one is negative and the second one positive. The returned value must be the sum, and the postcondition must check it. This situation is only possible when the language integrates orthogonal concepts such as passing-by-reference and contracts.
In this code:
procedure Tp2q4 is
function Set_Values(A : in out INTEGER; B : in out INTEGER) return BOOLEAN is
begin
A := 2;
B := 3;
return TRUE;
end Set_Values;
function Sum_Of_Numbers(A, B : in out INTEGER) return INTEGER
with
Pre => A < 0 and B > 0,
Post => (Sum_Of_Numbers'Result = A + B and then Set_Values(A'Access, B'Access))
is
begin
return A + B;
end Sum_Of_Numbers;
With this test:
A := -1;
B := 2;
Put(Sum_Of_Numbers(A,B));
Put(A);
Put(B);
I am suppose to get the result of the addition, the modification of A and the modification of B, so: -1 2 3
But i get : -1 1 2
So obviously the problem is either the value by reference or the post condition ... Any ideas how I could fix this?