aboutsummaryrefslogtreecommitdiff
path: root/tests/library/exp-string/program.cps
blob: 0adf86cc2544b45098cba0f5c59dc74d9b7dd196 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

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()
CALL CheckAsc()
CALL CheckChr()
CALL CheckIsNum()

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

PROCEDURE CheckAsc()
    DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : _EXP_STRING
    DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0')
    DECLARE High : _EXP_STRING(1, (C_CHAR)255)
    OUTPUT _EXP_STRING_ASC('A'), ":", _EXP_STRING_ASC(Letters)
    OUTPUT _EXP_STRING_ASC(Empty), ":", _EXP_STRING_ASC(Nuls), ":", _EXP_STRING_ASC('\0')
    OUTPUT _EXP_STRING_ASC(High)
ENDPROCEDURE

PROCEDURE CheckChr()
    CALL _EXP_STRING_OUTPUT(_EXP_STRING_CHR(65) & _EXP_STRING_CHR(90))
    OUTPUT _EXP_STRING_ASC(_EXP_STRING_CHR(_EXP_STRING_ASC('A')))
    OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_CHR(0)), ":", _EXP_STRING_ASC(_EXP_STRING_CHR(0))
    OUTPUT _EXP_STRING_ASC(_EXP_STRING_CHR(321)), ":", _EXP_STRING_ASC(_EXP_STRING_CHR(-1))
ENDPROCEDURE

PROCEDURE CheckIsNum()
    DECLARE Number : _EXP_STRING((C_STRING)"12.5")
    DECLARE Junk : _EXP_STRING((C_STRING)"12x")
    DECLARE Empty : _EXP_STRING
    DECLARE Leading : _EXP_STRING((C_STRING)" 12.5")
    DECLARE Trailing : _EXP_STRING((C_STRING)"12.5 ")
    DECLARE Whitespace : _EXP_STRING((C_STRING)" ")
    OUTPUT _EXP_STRING_IS_NUM(Number), ":", _EXP_STRING_IS_NUM(Junk), ":", _EXP_STRING_IS_NUM(Empty)
    OUTPUT _EXP_STRING_IS_NUM(Leading), ":", _EXP_STRING_IS_NUM(Trailing), ":", _EXP_STRING_IS_NUM(Whitespace)
    OUTPUT _EXP_STRING_IS_NUM(Number & _EXP_STRING_CHR(0)), ":", _EXP_STRING_IS_NUM(_EXP_STRING_CHR(0) & Number)
ENDPROCEDURE