factor/basis/io/buffers/buffers-tests.factor

66 lines
1.6 KiB
Factor

IN: io.buffers.tests
USING: alien alien.c-types alien.data io.buffers kernel
kernel.private libc sequences tools.test namespaces byte-arrays
strings accessors destructors ;
: buffer-set ( string buffer -- )
[ ptr>> swap >byte-array binary-object memcpy ]
[ [ length ] dip buffer-reset ]
2bi ;
: string>buffer ( string -- buffer )
dup length <buffer> [ buffer-set ] keep ;
: buffer-read-all ( buffer -- byte-array )
[ [ pos>> ] [ ptr>> ] bi <displaced-alien> ]
[ buffer-length ] bi
memory>byte-array ;
[ B{ } 65536 ] [
65536 <buffer>
dup buffer-read-all
over buffer-capacity
rot dispose
] unit-test
[ "hello world" "" ] [
"hello world" string>buffer
dup buffer-read-all >string
0 pick buffer-reset
over buffer-read-all >string
rot dispose
] unit-test
[ "hello" ] [
"hello world" string>buffer
5 over buffer-read >string swap dispose
] unit-test
[ 11 ] [
"hello world" string>buffer
[ buffer-length ] keep dispose
] unit-test
[ "hello world" ] [
"hello" 1024 <buffer> [ buffer-set ] keep
" world" >byte-array over >buffer
dup buffer-read-all >string swap dispose
] unit-test
[ CHAR: e ] [
"hello" string>buffer
1 over buffer-consume [ buffer-pop ] keep dispose
] unit-test
"hello world" string>buffer "b" set
[ "hello world" ] [ 1000 "b" get buffer-read >string ] unit-test
"b" get dispose
100 <buffer> "b" set
[ 1000 "b" get n>buffer >string ] must-fail
"b" get dispose
"hello world" string>buffer "b" set
[ "hello" CHAR: \s ] [ " " "b" get buffer-until [ >string ] dip ] unit-test
"b" get dispose