aboutsummaryrefslogtreecommitdiff
path: root/testsuite/runnable/generic_base.elna
blob: c36eccf0cdfe634cd31792f69614b7142eb90466 (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
type
  File = record
    fd: Int
  end

  List#[T] = record
    head: T;
    count: Word
  end

  Queue#[T] = record(List#[T])
    tail: T
  end

var
  jobs: Queue#[^File]
  seen: ^List#[^File]
  f: File

proc push#[T](target: ^List#[T]; value: T)
begin
  target^.head := value;
  target^.count := target^.count + 1u
return

proc enqueue#[T](target: ^Queue#[T]; value: T)
begin
  push(target, value);
  target^.tail := value
return

program()
begin
  seen := @jobs;
  enqueue(@jobs, @f);
  assert(jobs.count = 1u);
  assert(jobs.head = @f);
  assert(jobs.tail = @f);
  assert(#size(Queue#[^File]) = #size(Pointer) * 3u)
return 0u8

end.