]> gitweb.factorcode.org Git - factor.git/blob - core/strings/strings-tests.factor
factor: Retrying on the unit tests. Also normalize some syntax with FUNCTION:.
[factor.git] / core / strings / strings-tests.factor
1 USING: continuations kernel literals math math.order namespaces make
2 strings strings.private sbufs tools.test sequences vectors
3 arrays memory prettyprint io.streams.null kernel.private ;
4 IN: strings.tests
5
6 { CHAR: b } [ 1 >bignum "abc" nth ] unit-test
7
8 { } [ 10 [ [ -1000000 <sbuf> ] ignore-errors ] times ] unit-test
9
10 { "abc" } [ [ "a" "b" "c" ] [ [ % ] each ] "" make ] unit-test
11
12 { "abc" } [ "ab" "c" append ] unit-test
13 { "abc" } [ "a" "b" "c" 3append ] unit-test
14
15 { 3 } [ "a" "hola" start ] unit-test
16 { f } [ "x" "hola" start ] unit-test
17 { 0 } [ "" "a" start ] unit-test
18 { 0 } [ "" "" start ] unit-test
19 { 0 } [ "hola" "hola" start ] unit-test
20 { 1 } [ "ol" "hola" start ] unit-test
21 { f } [ "amigo" "hola" start ] unit-test
22 { f } [ "holaa" "hola" start ] unit-test
23
24 { "Beginning" } [ "Beginning and end" 9 head ] unit-test
25
26 { f } [ CHAR: I "team" member? ] unit-test
27 { t } [ "ea" "team" subseq? ] unit-test
28 { f } [ "actore" "Factor" subseq? ] unit-test
29
30 { "end" } [ "Beginning and end" 14 tail ] unit-test
31
32 { t } [ "abc" "abd" before? ] unit-test
33 { t } [ "z" "abd" after? ] unit-test
34 { "abc" } [ "abc" "abd" min ] unit-test
35 { "z" } [ "z" "abd" max ] unit-test
36
37 [ 0 10 "hello" subseq ] must-fail
38
39 { "Replacing+spaces+with+plus" }
40 [
41     "Replacing spaces with plus"
42     [ dup CHAR: \s = [ drop CHAR: + ] when ] map
43 ]
44 unit-test
45
46 { "05" } [ "5" 2 CHAR: 0 pad-head ] unit-test
47 { "666" } [ "666" 2 CHAR: 0 pad-head ] unit-test
48
49 [ 1 "" nth ] must-fail
50 [ -6 "hello" nth ] must-fail
51
52 { t } [ "hello world" dup >vector >string = ] unit-test
53
54 { "ab" } [ 2 "abc" resize-string ] unit-test
55 { "abc\0\0\0" } [ 6 "abc" resize-string ] unit-test
56
57 { "\u001234b" } [ 2 "\u001234bc" resize-string ] unit-test
58 { "\u001234bc\0\0\0" } [ 6 "\u001234bc" resize-string ] unit-test
59
60 ! Random tester found this
61 [ 2 -7 resize-string ]
62 [ ${ "kernel-error" ERROR-TYPE 11 -7 } = ] must-fail-with
63
64 ! Make sure 24-bit strings work
65 "hello world" "s" set
66
67 { } [ 0x1234 1 "s" get set-nth ] unit-test
68 { 0x1234 } [ 1 "s" get nth ] unit-test
69
70 { } [ 0x4321 3 "s" get set-nth ] unit-test
71 { 0x4321 } [ 3 "s" get nth ] unit-test
72
73 { } [ 0x654321 5 "s" get set-nth ] unit-test
74 { 0x654321 } [ 5 "s" get nth ] unit-test
75
76 {
77     {
78         CHAR: h
79         0x1234
80         CHAR: l
81         0x4321
82         CHAR: o
83         0x654321
84         CHAR: w
85         CHAR: o
86         CHAR: r
87         CHAR: l
88         CHAR: d
89     }
90 } [
91     "s" get >array
92 ] unit-test
93
94 ! Make sure string initialization works
95 { 0x123456 } [ 100 0x123456 <string> first ] unit-test
96
97 ! Make sure we clear aux vector when storing octets
98 { "\u123456hi" } [ "ih\u123456" clone reverse! ] unit-test
99
100 ! Make sure aux vector is not shared
101 { "\udeadbe" } [
102     "\udeadbe" clone
103     CHAR: \u123456 over clone set-first
104 ] unit-test
105
106 ! Regressions
107 { } [
108     [
109         4 [
110             100 [ "obdurak" clone ] replicate
111             gc
112             dup [
113                 1234 0 rot set-string-nth
114             ] each
115             1000 [
116                 1000 f <array> drop
117             ] times
118             .
119         ] times
120     ] with-null-writer
121 ] unit-test
122
123 { t } [
124     10000 [
125         drop
126         300 100 CHAR: \u123456
127         [ <string> clone resize-string first ] keep =
128     ] all-integers?
129 ] unit-test
130
131 "X" "s" set
132 { } [ 0x100,0000 0 "s" get set-nth ] unit-test
133 { 0 } [ 0 "s" get nth ] unit-test
134
135 { } [ -1 0 "s" get set-nth ] unit-test
136 { 0x7fffff } [ 0 "s" get nth ] unit-test