main pita/uxn12 / etc / tests / file.tal
  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