aboutsummaryrefslogtreecommitdiff
path: root/tests/library/exp-string/program.cps
blob: d66a01f56f5b71b072d9f422a80be5242a3609fe (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/std.cps"
FUNCTION Echo(S : STRING) RETURNS STRING
    RETURN S
ENDFUNCTION
DECLARE A : STRING((C_STRING)"hello")
DECLARE B : STRING(A)
B <- (C_STRING)"world"
B <- B
OUTPUT (A & B)
DECLARE Empty : STRING
OUTPUT LENGTH(Empty)
DECLARE Nuls : STRING(3, (C_CHAR)'\0')
OUTPUT LENGTH(Nuls)
DECLARE Long : STRING(20000, (C_CHAR)'x')
DECLARE I : INTEGER
FOR I <- 1 TO 100
    Long <- Long & A
NEXT I
OUTPUT LENGTH(Long)
Long <- Echo(Long)
OUTPUT LENGTH(Long)
OUTPUT (NUM_TO_STR(42) & NUM_TO_STR(1.25))
DECLARE Number : STRING((C_STRING)"12.5")
OUTPUT STR_TO_NUM(Number) = 12.5
TRY
    Number <- (C_STRING)"12x"
    OUTPUT STR_TO_NUM(Number)
CATCH
    OUTPUT "conversion caught"
ENDTRY
TRY
    DECLARE Invalid : STRING(-1, (C_CHAR)'x')
CATCH
    OUTPUT "length caught"
ENDTRY
CALL NUM_TO_STR(99)
CALL Echo(Long)
DECLARE Heap : STRING
Heap <- NEW STRING((C_STRING)"heap")
OUTPUT (Heap)
DELETE Heap
CALL CheckLeft()
CALL CheckRight()
CALL CheckMid()
CALL CheckLCase()
CALL CheckUCase()
CALL CheckAsc()
CALL CheckChr()
CALL CheckIsNum()

PROCEDURE CheckLeft()
    DECLARE Letters : STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : STRING
    DECLARE Nuls : STRING(3, (C_CHAR)'\0')
    DECLARE A : STRING((C_STRING)"hello")
    OUTPUT (LEFT(Letters, 3))
    OUTPUT LENGTH(LEFT(Empty, 2)), ":", LENGTH(LEFT(Letters, 0)), ":", LENGTH(LEFT(Letters, -1))
    OUTPUT (LEFT(Letters, 20))
    OUTPUT LENGTH(LEFT(Nuls & A, 4))
ENDPROCEDURE

PROCEDURE CheckRight()
    DECLARE Letters : STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : STRING
    DECLARE Nuls : STRING(3, (C_CHAR)'\0')
    DECLARE A : STRING((C_STRING)"hello")
    OUTPUT (RIGHT(Letters, 3))
    OUTPUT LENGTH(RIGHT(Empty, 2)), ":", LENGTH(RIGHT(Letters, 0)), ":", LENGTH(RIGHT(Letters, -1))
    OUTPUT (RIGHT(Letters, 20))
    OUTPUT LENGTH(RIGHT(A & Nuls, 4))
ENDPROCEDURE

PROCEDURE CheckMid()
    DECLARE Letters : STRING((C_STRING)"ABCDEFGH")
    DECLARE Empty : STRING
    DECLARE Nuls : STRING(3, (C_CHAR)'\0')
    OUTPUT (MID(Letters, 2, 3))
    OUTPUT (MID(Letters, -9223372036854775808, 2))
    OUTPUT (MID(Letters, 7, 9223372036854775807))
    OUTPUT LENGTH(MID(Empty, 1, 2)), ":", LENGTH(MID(Letters, 9223372036854775807, 2))
    OUTPUT LENGTH(MID(Letters, 2, 0)), ":", LENGTH(MID(Letters, 2, -1))
    OUTPUT LENGTH(MID(Nuls & Letters, 2, 4))
ENDPROCEDURE

PROCEDURE CheckLCase()
    DECLARE Mixed : STRING((C_STRING)"AbC@19")
    DECLARE Empty : STRING
    DECLARE Nuls : STRING(2, (C_CHAR)'\0')
    OUTPUT (LCASE(Mixed))
    OUTPUT (Mixed)
    DECLARE Lower : CHAR
    Lower <- LCASE('W')
    OUTPUT Lower, ":", LCASE('w'), ":", LCASE('@')
    OUTPUT LENGTH(LCASE(Empty)), ":", LENGTH(LCASE(Nuls & Mixed))
    OUTPUT (MID(LCASE(Nuls & Mixed), 3, 3))
ENDPROCEDURE

PROCEDURE CheckUCase()
    DECLARE Mixed : STRING((C_STRING)"AbC@19")
    DECLARE Empty : STRING
    DECLARE Nuls : STRING(2, (C_CHAR)'\0')
    OUTPUT (UCASE(Mixed))
    OUTPUT (Mixed)
    DECLARE Upper : CHAR
    Upper <- UCASE('h')
    OUTPUT Upper, ":", UCASE('H'), ":", UCASE('@')
    OUTPUT LENGTH(UCASE(Empty)), ":", LENGTH(UCASE(Nuls & Mixed))
    OUTPUT (MID(UCASE(Nuls & Mixed), 3, 3))
ENDPROCEDURE

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

PROCEDURE CheckChr()
    OUTPUT (CHR(65) & CHR(90))
    OUTPUT ASC(CHR(ASC('A')))
    OUTPUT LENGTH(CHR(0)), ":", ASC(CHR(0))
    OUTPUT ASC(CHR(321)), ":", ASC(CHR(-1))
ENDPROCEDURE

PROCEDURE CheckIsNum()
    DECLARE Number : STRING((C_STRING)"12.5")
    DECLARE Junk : STRING((C_STRING)"12x")
    DECLARE Empty : STRING
    DECLARE Leading : STRING((C_STRING)" 12.5")
    DECLARE Trailing : STRING((C_STRING)"12.5 ")
    DECLARE Whitespace : STRING((C_STRING)" ")
    OUTPUT IS_NUM(Number), ":", IS_NUM(Junk), ":", IS_NUM(Empty)
    OUTPUT IS_NUM(Leading), ":", IS_NUM(Trailing), ":", IS_NUM(Whitespace)
    OUTPUT IS_NUM(Number & CHR(0)), ":", IS_NUM(CHR(0) & Number)
ENDPROCEDURE