aboutsummaryrefslogtreecommitdiff
path: root/tests/i/template-explicit-args/program.cps
blob: 123bda6e01440d0327f7ffadb4c9e151836d067e (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

TEMPLATE <T>
FUNCTION Max(A : T, B : T) RETURNS T
    IF A > B THEN
        RETURN A
    ENDIF
    RETURN B
ENDFUNCTION

TEMPLATE <A, B>
FUNCTION Second(First : A, Last : B) RETURNS B
    RETURN Last
ENDFUNCTION

TEMPLATE <T>
FUNCTION Zero() RETURNS T
    RETURN (T)0
ENDFUNCTION

TEMPLATE <T>
PROCEDURE Print(Value : T)
    OUTPUT Value
ENDPROCEDURE

TEMPLATE <T>
FUNCTION Echo(Value : T) RETURNS T
    RETURN Value
ENDFUNCTION

TEMPLATE <T>
OVERLOAD FUNCTION Pick(Value : T) RETURNS INTEGER
    RETURN 100
ENDFUNCTION
OVERLOAD FUNCTION Pick(Value : INTEGER) RETURNS INTEGER
    RETURN 200
ENDFUNCTION

OUTPUT Max<REAL>(1.5, 2.0)
OUTPUT Max<INTEGER>(Max<INTEGER>(1, 2), 3)
OUTPUT Second<INTEGER>(7, "tail")
OUTPUT Zero<REAL>()
CALL Print<REAL>(2.5)
Print<INTEGER>(9)
OUTPUT Pick(7)
OUTPUT Pick<INTEGER>(7)
OUTPUT (STRING)Echo<STRING>("chain").C_STR()
CALL Echo<STRING>("discarded")
Echo<STRING>("also discarded")