aboutsummaryrefslogtreecommitdiff
path: root/tests/ii/overload-methods/program.cps
blob: 5594cf0410ce42f3e3f0a019ec0a91540a8b0b72 (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

CLASS Meter
    PRIVATE Value : INTEGER
    PUBLIC OVERLOAD PROCEDURE NEW()
        Value <- 5
    ENDPROCEDURE
    PUBLIC OVERLOAD PROCEDURE NEW(X : INTEGER)
        Value <- 2 * X + 3
    ENDPROCEDURE
    PUBLIC OVERLOAD PROCEDURE NEW(Text : STRING)
        Value <- LENGTH(Text) + 20
    ENDPROCEDURE
    PUBLIC OVERLOAD PROCEDURE NEW(X : INTEGER, Y : INTEGER)
        Value <- X - Y
    ENDPROCEDURE
    PUBLIC OVERLOAD FUNCTION Get() RETURNS INTEGER
        RETURN Value
    ENDFUNCTION
    PUBLIC OVERLOAD FUNCTION Get(X : INTEGER) RETURNS INTEGER
        RETURN Value + 3 * X
    ENDFUNCTION
    PUBLIC OVERLOAD FUNCTION Get(X : REAL) RETURNS BOOLEAN
        RETURN Value > X
    ENDFUNCTION
    PUBLIC OVERLOAD FUNCTION Get(Text : STRING) RETURNS STRING
        RETURN Text & "!"
    ENDFUNCTION
    PUBLIC OVERLOAD PROCEDURE Set(X : INTEGER)
        Value <- X
    ENDPROCEDURE
    PUBLIC OVERLOAD PROCEDURE Set(Text : STRING)
        Value <- LENGTH(Text)
    ENDPROCEDURE
    PUBLIC PROCEDURE Apply(X : INTEGER)
        CALL this.Set(this.Get(X))
    ENDPROCEDURE
ENDCLASS
TYPE Holder
    DECLARE Item : Meter
ENDTYPE
DECLARE Count : INTEGER
DECLARE Row : INTEGER
DECLARE A : INTEGER
DECLARE B : INTEGER
DECLARE Size : INTEGER
DECLARE Text : STRING
DECLARE I : INTEGER
DECLARE Total : INTEGER
INPUT Count
FOR Row <- 1 TO Count
    INPUT A
    INPUT B
    INPUT Size
    INPUT Text
    DECLARE DefaultItem : Meter
    DECLARE NumberItem : Meter(A)
    DECLARE TextItem : Meter(Text)
    DECLARE PairItem : Meter(A, B)
    DECLARE Wrapped : Holder
    DECLARE Items : ARRAY[1:Size] OF Meter
    DECLARE ChangedNumber : Meter(A)
    DECLARE ChangedText : Meter(Text)
    DECLARE Rebuilt : Meter(A, B)
    DECLARE HeapItem : Meter
    Total <- 0
    FOR I <- 1 TO Size
        Total <- Total + Items[I].Get()
    NEXT I
    HeapItem <- NEW Meter(A, B)
    CALL ChangedNumber.Set(Text)
    CALL ChangedText.Set(A)
    CALL ChangedText.Apply(B)
    CALL Rebuilt.NEW(Text)
    OUTPUT DefaultItem.Get(), ":", NumberItem.Get(), ":", TextItem.Get(), ":", PairItem.Get(), ":", Wrapped.Item.Get(), ":", Total, ":", NumberItem.Get(B), ":", NumberItem.Get(B / 8), ":", NumberItem.Get(Text), ":", HeapItem.Get(), ":", ChangedNumber.Get(), ":", ChangedText.Get(), ":", Rebuilt.Get()
    DELETE HeapItem
NEXT Row