aboutsummaryrefslogtreecommitdiff
path: root/tests/library/exp-string/program.cps
blob: 61a915c9295b76ecb06c23d6e7b431376e238bfb (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

INCLUDE "../../../pseudocode-lib/_exp_string.cps"
FUNCTION Echo(S : _EXP_STRING) RETURNS _EXP_STRING
    RETURN S
ENDFUNCTION
DECLARE A : _EXP_STRING((C_STRING)"hello")
DECLARE B : _EXP_STRING(A)
B <- (C_STRING)"world"
B <- B
CALL _EXP_STRING_OUTPUT(A & B)
DECLARE Empty : _EXP_STRING
OUTPUT _EXP_STRING_LENGTH(Empty)
DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0')
OUTPUT _EXP_STRING_LENGTH(Nuls)
DECLARE Long : _EXP_STRING(20000, (C_CHAR)'x')
DECLARE I : INTEGER
FOR I <- 1 TO 100
    Long <- Long & A
NEXT I
OUTPUT _EXP_STRING_LENGTH(Long)
Long <- Echo(Long)
OUTPUT _EXP_STRING_LENGTH(Long)
CALL _EXP_STRING_OUTPUT(_EXP_STRING_NUM_TO_STR(42) & _EXP_STRING_NUM_TO_STR(1.25))
DECLARE Number : _EXP_STRING((C_STRING)"12.5")
OUTPUT _EXP_STRING_STR_TO_NUM(Number) = 12.5
TRY
    Number <- (C_STRING)"12x"
    OUTPUT _EXP_STRING_STR_TO_NUM(Number)
CATCH
    OUTPUT "conversion caught"
ENDTRY
TRY
    DECLARE Invalid : _EXP_STRING(-1, (C_CHAR)'x')
CATCH
    OUTPUT "length caught"
ENDTRY
CALL _EXP_STRING_NUM_TO_STR(99)
CALL Echo(Long)
DECLARE Heap : _EXP_STRING
Heap <- NEW _EXP_STRING((C_STRING)"heap")
CALL _EXP_STRING_OUTPUT(Heap)
DELETE Heap
CALL CheckLeft()
CALL CheckRight()
CALL CheckMid()
CALL CheckLCase()
CALL CheckUCase()

PROCEDURE CheckLeft()
    DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0')
    DECLARE A : _EXP_STRING((C_STRING)"hello")
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 3))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, -1))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 20))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Nuls & A, 4))
ENDPROCEDURE

PROCEDURE CheckRight()
    DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0')
    DECLARE A : _EXP_STRING((C_STRING)"hello")
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 3))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, -1))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 20))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(A & Nuls, 4))
ENDPROCEDURE

PROCEDURE CheckMid()
    DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0')
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 2, 3))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, -9223372036854775808, 2))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 7, 9223372036854775807))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Empty, 1, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 9223372036854775807, 2))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, -1))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Nuls & Letters, 2, 4))
ENDPROCEDURE

PROCEDURE CheckLCase()
    DECLARE Mixed : _EXP_STRING((C_STRING)"AbC@19")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0')
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_LCASE(Mixed))
    CALL _EXP_STRING_OUTPUT(Mixed)
    DECLARE Lower : CHAR
    Lower <- _EXP_STRING_LCASE('W')
    OUTPUT Lower, ":", _EXP_STRING_LCASE('w'), ":", _EXP_STRING_LCASE('@')
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Empty)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Nuls & Mixed))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(_EXP_STRING_LCASE(Nuls & Mixed), 3, 3))
ENDPROCEDURE

PROCEDURE CheckUCase()
    DECLARE Mixed : _EXP_STRING((C_STRING)"AbC@19")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0')
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_UCASE(Mixed))
    CALL _EXP_STRING_OUTPUT(Mixed)
    DECLARE Upper : CHAR
    Upper <- _EXP_STRING_UCASE('h')
    OUTPUT Upper, ":", _EXP_STRING_UCASE('H'), ":", _EXP_STRING_UCASE('@')
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_UCASE(Empty)), ":", _EXP_STRING_LENGTH(_EXP_STRING_UCASE(Nuls & Mixed))
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(_EXP_STRING_UCASE(Nuls & Mixed), 3, 3))
ENDPROCEDURE