]> gitweb.factorcode.org Git - factor.git/blob - basis/io/buffers/buffers-tests.factor
Slices over specialized arrays can now be passed to C functions, written to binary...
[factor.git] / basis / io / buffers / buffers-tests.factor
1 IN: io.buffers.tests
2 USING: alien alien.c-types alien.data io.buffers kernel
3 kernel.private libc sequences tools.test namespaces byte-arrays
4 strings accessors destructors ;
5
6 : buffer-set ( string buffer -- )
7     [ ptr>> swap >byte-array binary-object memcpy ]
8     [ [ length ] dip buffer-reset ]
9     2bi ;
10
11 : string>buffer ( string -- buffer )
12     dup length <buffer> [ buffer-set ] keep ;
13
14 : buffer-read-all ( buffer -- byte-array )
15     [ [ pos>> ] [ ptr>> ] bi <displaced-alien> ]
16     [ buffer-length ] bi
17     memory>byte-array ;
18
19 [ B{ } 65536 ] [
20     65536 <buffer>
21     dup buffer-read-all
22     over buffer-capacity
23     rot dispose
24 ] unit-test
25
26 [ "hello world" "" ] [
27     "hello world" string>buffer
28     dup buffer-read-all >string
29     0 pick buffer-reset
30     over buffer-read-all >string
31     rot dispose
32 ] unit-test
33
34 [ "hello" ] [
35     "hello world" string>buffer
36     5 over buffer-read >string swap dispose
37 ] unit-test
38
39 [ 11 ] [
40     "hello world" string>buffer
41     [ buffer-length ] keep dispose
42 ] unit-test
43
44 [ "hello world" ] [
45     "hello" 1024 <buffer> [ buffer-set ] keep
46     " world" >byte-array over >buffer
47     dup buffer-read-all >string swap dispose
48 ] unit-test
49
50 [ CHAR: e ] [
51     "hello" string>buffer
52     1 over buffer-consume [ buffer-pop ] keep dispose
53 ] unit-test
54
55 "hello world" string>buffer "b" set
56 [ "hello world" ] [ 1000 "b" get buffer-read >string ] unit-test
57 "b" get dispose
58
59 100 <buffer> "b" set
60 [ 1000 "b" get n>buffer >string ] must-fail
61 "b" get dispose
62
63 "hello world" string>buffer "b" set
64 [ "hello" CHAR: \s ] [ " " "b" get buffer-until [ >string ] dip ] unit-test
65 "b" get dispose