1( 54K . File Test )
2
3|10 @Console/vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
4|a0 @File/vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
5|004f @Varvara/version
6
7|100
8
9@on-reset ( -> )
10 ;meta #06 DEO2
11 #800f DEO
12 ;dict/write file/test-write <test>
13 ;dict/append file/test-append <test>
14 ;dict/read file/test-read <test>
15 ;dict/read-of file/test-read-of <test>
16 ;dict/stat file/test-stat <test>
17 ;dict/stat-oversize file/test-stat-oversize <test>
18 ;dict/stat-of file/test-stat-of <test>
19 ;dict/write-of file/test-write-of <test>
20 ;dict/delete file/test-delete <test>
21 ;dict/success file/test-success <test>
22 ( | Dir )
23 ;dict/dir-spacer file/test-dir-spacer <test>
24 ;dict/dir-partial file/test-dir-partial <test>
25 ( ;dict/dir-nostream file/test-dir-nostream <test> ) ( | cleanup )
26 ;file/name .File/name DEO2
27 #01 .File/delete DEO
28 BRK
29
30@meta 00
31 ( name ) "File 20 "Device 20 "Test(80K) 0a
32 ( details ) "Testing 20 "Program 0a
33 ( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a
34 ( date ) "24 20 "Jun 20 "2026 00
35 ( . ) 01
36 ( - ) 56 =Varvara/version
37
38(
39@|Tests )
40
41@file/test-write ( -- pass )
42 ;&name .File/name DEO2
43 #0002 .File/length DEO2
44 ;&a1 .File/write DEO2
45 .File/success DEI2 #0002 EQU2 JMP2r
46
47@file/test-append ( -- pass )
48 ;&name .File/name DEO2
49 #0002 .File/length DEO2
50 #01 .File/append DEO
51 ;&b1 .File/write DEO2
52 .File/success DEI2 #0002 EQU2 JMP2r
53
54@file/test-read ( -- pass )
55 ;&name .File/name DEO2
56 ( 4+2 ) #0006 .File/length DEO2
57 ;&read-buf .File/read DEO2
58 ( success ) .File/success DEI2 #0004 EQU2
59 ( a ) ;&a1 LDA2 ;&a2 LDA2 EQU2 AND
60 ( b ) ;&b1 LDA2 ;&b2 LDA2 EQU2 AND JMP2r
61
62@file/test-stat ( -- pass )
63 ;&name .File/name DEO2
64 #0004 .File/length DEO2
65 ;&stat-buf .File/stat DEO2
66 ( success ) .File/success DEI2 #0004 EQU2
67 ( a ) ;&stat-hs LDA2 LIT2 "00 EQU2 AND
68 ( b ) ;&stat-ls LDA2 LIT2 "04 EQU2 AND
69 ( | try missing file )
70 ;&unknown-name .File/name DEO2
71 #0002 .File/length DEO2
72 ;&stat-buf .File/stat DEO2
73 ;&stat-buf LDA2 LIT2 "!! EQU2 AND JMP2r
74
75@file/test-stat-of ( -- pass )
76 ;&name .File/name DEO2
77 #0004 .File/length DEO2
78 #fffe .File/stat DEO2
79 .File/success DEI2 #0002 EQU2 JMP2r
80
81@file/test-stat-oversize ( -- pass )
82 ;&name .File/name DEO2
83 #0020 .File/length DEO2
84 #00 .File/append DEO
85 #f000 .File/write DEO2
86 ( | Read stat too small )
87 ;&name .File/name DEO2
88 #0000 .File/length DEO2
89 ;&sobuf .File/stat DEO2
90 ;&sobuf LDA #00 EQU ?{ #00 JMP2r }
91 #0001 .File/length DEO2
92 ;&sobuf .File/stat DEO2
93 ;&sobuf LDA LIT "? EQU ?{ #00 JMP2r }
94 #0002 .File/length DEO2
95 ;&sobuf .File/stat DEO2
96 ;&sobuf LDA2 LIT2 "20 EQU2 ?{ #00 JMP2r }
97 #0003 .File/length DEO2
98 ;&sobuf .File/stat DEO2
99 ;&sobuf LDA2 LIT2 "02 EQU2 JMP2r
100 &sobuf $4
101
102@file/test-delete ( -- pass )
103 ;&name .File/name DEO2
104 #01 .File/delete DEO
105 .File/success DEI2 #0001 EQU2
106 ( | stat )
107 ;&name .File/name DEO2
108 #0002 .File/length DEO2
109 ;&null-buf .File/stat DEO2
110 ;&null-buf LDA2 LIT2 "!! EQU2 AND
111 ( | try failure )
112 #01 .File/delete DEO
113 .File/success DEI2 #0000 EQU2 AND JMP2r
114
115@file/test-write-of ( -- pass )
116 ;&name .File/name DEO2
117 #0004 .File/length DEO2
118 #fffe .File/write DEO2
119 .File/success DEI2 #0002 EQU2 JMP2r
120
121@file/test-read-of ( -- pass )
122 ;&name .File/name DEO2
123 #0002 .File/length DEO2
124 #ffff .File/read DEO2
125 .File/success DEI2 #0001 EQU2 JMP2r
126
127@file/test-dir-spacer ( -- pass )
128 ;&dirpath .File/name DEO2
129 #0200 .File/length DEO2
130 ;&dirbuf .File/read DEO2
131 ;&dirbuf #0004 ADD2 LDA #09 EQU JMP2r
132
133 &dirpath ". 00
134
135@file/test-dir-partial ( -- pass )
136 ( a ) LIT "~ ;&dirbuf #0007 ADD2 STA
137 ( b ) LIT "~ ;&dirbuf #0009 ADD2 STA
138 ;&dirpath .File/name DEO2
139 #0008 .File/length DEO2
140 ;&dirbuf .File/read DEO2
141 ( b ) LIT "~ ;&dirbuf #0009 ADD2 LDA EQU
142 ( a ) LIT "~ ;&dirbuf #0007 ADD2 LDA NEQ AND JMP2r
143
144@file/test-dir-nostream ( -- pass )
145 ;&dirpath .File/name DEO2
146 #0008 .File/length DEO2
147 ;&bufa .File/read DEO2
148 ;&bufb .File/read DEO2
149 ;&bufa ;&bufb !str/cmp
150
151@file/test-success ( -- pass )
152 ;&name .File/name DEO2
153 #01 .File/delete DEO
154 #00 .File/success-lb DEI EQU ?{ #00 JMP2r }
155 ( | Make file )
156 #0003 .File/length DEO2
157 ;&string .File/write DEO2
158 .File/success DEI2 #0003 EQU2 ?{ #00 JMP2r }
159 ( | Zero load )
160 #0000 .File/length DEO2
161 ;&sz .File/read DEO2
162 #00 .File/success-lb DEI EQU ?{ #00 JMP2r }
163 ( | Each letter )
164 #0001 .File/length DEO2
165 ;&sa .File/read DEO2
166 .File/success-lb DEI ?{ #00 JMP2r }
167 [ LIT2 &sa $1 "a ] EQU ?{ #00 JMP2r }
168 ;&sb .File/read DEO2
169 .File/success-lb DEI ?{ #00 JMP2r }
170 [ LIT2 &sb $1 "b ] EQU ?{ #00 JMP2r }
171 ;&sc .File/read DEO2
172 .File/success-lb DEI ?{ #00 JMP2r }
173 [ LIT2 &sc $1 "c ] EQU ?{ #00 JMP2r }
174 ;&sz .File/read DEO2
175 .File/success-lb DEI ?{ #01 JMP2r }
176 #00 JMP2r
177
178 &string "abc 00 &sz $1
179
180(
181@|Helpers )
182
183@<test> ( name* f -- )
184 ?{
185 str/<print>
186 #010f DEO
187 ;dict/fail !str/<print> }
188 str/<print>
189 ;dict/pass
190 ( >> )
191
192@str/<print> ( str* -- )
193 LDAk DUP ?{ POP POP2 JMP2r }
194 .Console/write DEO
195 INC2 !/<print>
196
197@str/cmp ( a* b* -- f )
198 STH2
199 &>wc
200 LDAk ?{ &d LDA LDAr STHr EQU JMP2r }
201 LDAk LDAkr STHr NEQ ?&d
202 INC2 INC2r !&>wc
203
204(
205@|Assets )
206
207@dict/write "File/write: 20 $1
208 &append "File/append: 20 $1
209 &read "File/read: 20 $1
210 &stat "File/stat: 20 $1
211 &stat-oversize "File/stat(oversize): 20 $1
212 &stat-of "File/stat(overflow): 20 $1
213 &delete "File/delete: 20 $1
214 &write-of "File/write(overflow): 20 $1
215 &read-of "File/read(overflow): 20 $1
216 &dir-spacer "File/dir(spacer): 20 $1
217 &dir-nostream "File/dir(nostream): 20 $1
218 &dir-partial "File/dir(partial): 20 $1
219 &success "File/success: 20 $1
220 &fail "fail 0a $1
221 &pass "pass 0a $1
222
223@file/a1 1234 &b1 5678
224 ( read buf ) &read-buf &a2 $2 &b2 $2
225 ( stat buf ) &stat-buf &stat-hs $2 &stat-ls $2
226 ( null buf ) &null-buf $4
227 &name "test.txt $1
228 &unknown-name "abcdefghj $1 &dirbuf $200 &bufa $8 &bufb $8
229