Sigrid Solveig Haflínudóttirio tests: line buffering and flush2681a2b1 year agoHistory
181 lines · 5.9 KB · Text
RawDownload
(assert-fail (buffer 123)) (def b (buffer))(assert (io? b))(assert (eq? (type-of b) 'io))(assert (eq? (io-buffer-mode b) :memory))(assert (= (size-of b) 0)) ; no data(assert (= (io-pos b) 0))(assert (= (io-pos! b 1) 0))(assert (eof-object? (io-read b 'u8))) ; empty - EOF(assert (io-eof? b))(assert (eof-object? (io-read b 'u8))) ; still empty - EOF again(assert (io-eof? b)); write one rune(assert (= (io-write b #\¢) 3))(assert (= (size-of b) 3))(assert (= (io-pos b) 3)); go back(assert (= (io-pos! b 0) 0))(assert (not (io-eof? b))); read it back and compare(def x (io-read b 'rune))(assert (eq? (type-of x) 'rune))(assert (equal? x #\¢))(assert (not (io-eof? b)))(assert (eof-object? (io-read b 'rune)))(assert (io-eof? b))(assert (= (io-pos b) 3)); read as an array of bytes and compare(assert (= (io-pos! b 0) 0))(assert (equal? (io-read b 'u8 3) (arr 'u8 #xef #xbf #xa0))); go back and try reading more than there is(assert (= (io-pos! b 0) 0))(assert (eof-object? (io-read b 'u8 4)));(assert (io-eof? b)) ; FIXME shouldn't it return T?; go back and read as an utf8 string(assert (= (io-pos! b 0) 0))(assert (equal? (io-read b 'utf8) "¢")); go back and read as an array of runes(assert (= (io-pos! b 0) 0))(assert (equal? (io-read b 'rune 1) (arr 'rune #\¢))); skip back and forth(assert (= (io-skip b -1) 2))(assert (= (io-pos b) 2))(assert (= (io-skip b -1) 1))(assert (= (io-pos b) 1))(assert (= (io-skip b -2 :end T) 1))(assert (= (io-pos b) 1))(assert (= (io-skip b -3 :end T) 0))(assert (= (io-pos b) 0))(assert (equal? (io-read b 'rune) #\¢)); convert to string - destructive operation(assert (= (io-pos! b 0) 0))(assert (equal? (io->str b) "¢"))(assert (= (io-pos b) 0))(assert (= (io-pos! b 9) 0))(assert (= (size-of b) 0)); filename(assert (equal? (io-filename b) ""))(assert (equal? (io-filename! b "hi") "hi"))(assert (equal? (io-filename b) "hi")); write some more(assert (= (io-write b "hello") 5)); truncate(assert (void? (io-truncate b 3))) ; shrinking(assert (= (size-of b) 3))(assert (= (io-pos b) 3))(assert (void? (io-truncate b 0))) ; emptying(assert (eof-object? (io-read b 'u8)))(assert (io-eof? b))(assert (= (size-of b) 0))(assert (= (io-pos b) 0))(assert (= (io-pos! b 1) 0))(assert (eof-object? (io-read b 'u8)))(assert (io-eof? b)); closed from now on(assert (void? (io-close b))); can close again without errors - noop(assert (void? (io-close b))); filename still usable(assert (equal? (io-filename b) "hi"))(assert (equal? (io-filename! b "no") "no"))(assert (equal? (io-filename b) "no")); can't do much(assert-fail (io->str b) io-error)(assert-fail (io-buffer-mode b) io-error)(assert-fail (io-buffer-mode! b NIL) io-error)(assert-fail (io-eof? b) io-error)(assert-fail (io-peek-rune b) io-error)(assert-fail (io-pos b) io-error)(assert-fail (io-pos! b 0) io-error)(assert-fail (io-read b 'u8) io-error)(assert-fail (io-read-all b) io-error)(assert-fail (io-read-line b) io-error)(assert-fail (io-read-lines b) io-error)(assert-fail (io-read-until b #\x) io-error)(assert-fail (io-skip b 0) io-error)(assert-fail (io-truncate b 0) io-error)(assert-fail (io-write b "") io-error) (def b (buffer)); write an array of runes(assert (= (io-write b (arr 'rune #\¡ #\¿ #\nul #\x #\y #\z)) 8))(assert (= (io-pos! b 0))); read back as an utf8 string, 3 runes total(assert (equal? (io-read b 'utf8 3) "¡¿\x00"))(assert (= (io-pos! b 0))); now peek a rune(assert (equal? (io-peek-rune b) #\¡))(assert (equal? (io-peek-rune b) #\¡)); read until #\nul(assert (equal? (io-read-until b #\nul) "¡¿\x00")); read the rest as a line(assert (equal? (io-read-line b) "xyz")); nothing left(assert (equal? (io-read-all b) ""))(assert (eof-object? (io-read b 'u8))) ; path-cwd(assert (str? (path-cwd)))(assert (path-cwd "."))(assert-fail (path-cwd "." ".") arity-error)(assert-fail (path-cwd "does/not/exist") io-error) ; path-exists? + delete-file(assert (path-exists? "."))(assert (not (path-exists? "doesnotexist.txt")))(assert-fail (delete-file "doesnotexist.txt") io-error)(def f (file "doesexist.txt" :write :create :truncate))(assert (io? f))(assert (path-exists? "doesexist.txt"))(assert-fail (io-read f 'u8) io-error) ; read on write-only(io-close f)(assert (path-exists? "doesexist.txt"))(def f (file "doesexist.txt"))(assert (io? f))(assert-fail (io-write f (u8 0)) io-error) ; write on read-only(assert (delete-file "doesexist.txt"))(assert (not (path-exists? "doesexist.txt")))(assert (eof-object? (io-read f 'u8)))(assert (void? (io-close f))) (def lines '("12345 абвгд weoiwhefohwefoihweoifh wefiweu3209u092039 jhksjdvksdjvbksdvb qwhqhfohwefe weofhweofhoiewhfoiwhefh\n"             "hello, world!\n"             "\n"             "\n"             "x"))(def data (apply str lines))(def f (file "test.txt" :write :create :append :truncate))(assert (io? f))(assert (eq? (io-buffer-mode f) :block))(assert-fail (io-buffer-mode!))(assert-fail (io-buffer-mode! f))(assert-fail (io-buffer-mode! f 'blah))(assert-fail (io-buffer-mode! f :memory))(assert (eq? (io-buffer-mode! f :block) :block))(assert (eq? (io-buffer-mode f) :block))(assert (eq? (io-buffer-mode! f :line) :line))(assert (eq? (io-buffer-mode f) :line))(assert (eq? (io-buffer-mode! f NIL) NIL))(assert (eq? (io-buffer-mode f) NIL))(assert (eq? (io-buffer-mode! f :line) :line))(assert (= (io-write f data) (size-of data)))(def f2 (file "test.txt"))(assert (= (io-skip f2 0 :end T) (1- (size-of data))))(assert (io-flush f))(assert (= (io-skip f2 0 :end T) (size-of data)))(assert (void? (io-close f2)))(assert (void? (io-close f)))(def f (file "test.txt" :read))(assert (io? f))(assert (equal? (io-read-lines f) lines))(assert (= (io-line f) 5))(assert (= (io-column f) 1))(assert (= (io-pos! f 0)))(assert (equal? (io-read-all f) data))(assert (= (io-line f) 5))(assert (= (io-column f) 1))(assert-fail (io-truncate f 0))(assert (void? (io-close f)))(assert (void? (delete-file "test.txt")))

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t