summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/test/units/system/tassert4.pp
blob: 7ff86fd3a9245d47de600df541db9ad43d96d5f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{$C+}
program tassert4;

var
 global_boolean : boolean;
 counter : longint;

const
  RESULT_BOOLEAN = false;
  RESULT_STRING = 'hello world';

procedure fail;
 begin
   Writeln('Failure!');
   Halt(1);
 end;

function get_boolean : boolean;
 begin
   get_boolean := RESULT_BOOLEAN;
 end;

procedure test_assert_reference_global;
 begin
  global_boolean:=RESULT_BOOLEAN;
  assert(global_boolean,RESULT_STRING);
 end;

procedure test_assert_reference_local;
 var
  b: boolean;
 begin
  b:=RESULT_BOOLEAN;
  assert(b,RESULT_STRING);
 end;


procedure test_assert_register;
 begin
  assert(get_boolean,RESULT_STRING);
 end;

procedure test_assert_flags;
 var
  i,j : integer;
 begin
  i:=0;
  j:=-12;
  assert(i < j,RESULT_STRING);
 end;

 procedure test_assert_constant;
  begin
    assert(RESULT_BOOLEAN,RESULT_STRING);
  end;

  { Handle the assertion failed ourselves, so we can test everything in
    one shot.
  }
  Procedure MyAssertRoutine(const msg,fname:ShortString;lineno:longint;erroraddr:{$ifdef VER1_0}longint{$else}pointer{$endif});
   begin
     Inc(counter);
     if msg <> RESULT_STRING then
       fail;
   end;




begin
  counter:=0;
  AssertErrorProc := @MyAssertRoutine;
  Write('Assert test (FALSE) with assertions on...');
  test_assert_reference_global;
  test_assert_reference_local;
  test_assert_register;
  test_assert_flags;
  test_assert_constant;
  if counter <> 5 then
     fail
  else
     WriteLn('Success!');
end.