Skip to content

Commit f02b30d

Browse files
committed
udt-wstring: LTRIM, RTRIM, TRIM will accept UDT as z|wstring
1 parent 176a562 commit f02b30d

File tree

6 files changed

+350
-28
lines changed

6 files changed

+350
-28
lines changed

changelog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Version 1.07.0
99
- github #141: fbc will default to stripping symbols if '-d ENABLE_STRIPALL' is passed in FBCFLAGS (William Breathitt Gray)
1010
- github #141: makefile option 'ENABLE_STRIPALL=1' introduced to pass '-d ENABLE_STRIPALL' via FBCFLAGS by default for dos/win32 targets (William Breathitt Gray)
1111
- 'TYPE udt EXTENDS Z|WSTRING' allowed to specify that UDT is a kind of Z|WSTRING
12+
- LTRIM/RTRIM/TRIM will accept UDT as Z|WSTRING
1213

1314
[fixed]
1415
- sf.net #881: C backend: support for varadic function parameters in gcc using __builtin_va_list type and related macros

src/compiler/rtl-string.bas

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3526,6 +3526,11 @@ function rtlStrTrim _
35263526

35273527
function = NULL
35283528

3529+
astTryConvertUdtToWstring( nd_text )
3530+
if( nd_pattern ) then
3531+
astTryConvertUdtToWstring( nd_pattern )
3532+
end if
3533+
35293534
dtype = astGetDataType( nd_text )
35303535

35313536
''
@@ -3579,6 +3584,11 @@ function rtlStrRTrim _
35793584

35803585
function = NULL
35813586

3587+
astTryConvertUdtToWstring( nd_text )
3588+
if( nd_pattern ) then
3589+
astTryConvertUdtToWstring( nd_pattern )
3590+
end if
3591+
35823592
dtype = astGetDataType( nd_text )
35833593

35843594
''
@@ -3632,6 +3642,11 @@ function rtlStrLTrim _
36323642

36333643
function = NULL
36343644

3645+
astTryConvertUdtToWstring( nd_text )
3646+
if( nd_pattern ) then
3647+
astTryConvertUdtToWstring( nd_pattern )
3648+
end if
3649+
36353650
dtype = astGetDataType( nd_text )
36363651

36373652
''

tests/udt-wstring/trim.bas

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
#include "fbcunit.bi"
2+
#include once "uwstring-fixed.bi"
3+
#include once "chk-wstring.bi"
4+
5+
#define ustring UWSTRING_FIXED
6+
7+
SUITE( fbc_tests.udt_wstring_.trim_ )
8+
9+
'' L/R/TRIM( wstring )
10+
#macro check_rtlfunc( rtlfunc, text )
11+
scope
12+
dim t as wstring * 50 = text
13+
dim u as ustring = t
14+
15+
CU_ASSERT( t = text )
16+
CU_ASSERT( u = t )
17+
18+
dim rt as wstring * 50 = rtlfunc( t )
19+
dim ru as wstring * 50 = rtlfunc( u )
20+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
21+
22+
end scope
23+
#endmacro
24+
25+
'' L/R/TRIM( wstring, pattern )
26+
#macro check_rtlfunc_filter( rtlfunc, text, pattern )
27+
scope
28+
dim t as wstring * 50 = text
29+
dim u as ustring = t
30+
31+
CU_ASSERT( t = text )
32+
CU_ASSERT( u = t )
33+
34+
dim tf as wstring * 50 = pattern
35+
dim uf as ustring = tf
36+
37+
'' wstring, udt
38+
scope
39+
dim rt as wstring * 50 = rtlfunc( t, tf )
40+
dim ru as wstring * 50 = rtlfunc( t, uf )
41+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
42+
end scope
43+
44+
'' udt, wstring
45+
scope
46+
dim rt as wstring * 50 = rtlfunc( t, tf )
47+
dim ru as wstring * 50 = rtlfunc( u, tf )
48+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
49+
end scope
50+
51+
'' udt, udt
52+
scope
53+
dim rt as wstring * 50 = rtlfunc( t, tf )
54+
dim ru as wstring * 50 = rtlfunc( u, uf )
55+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
56+
end scope
57+
58+
end scope
59+
#endmacro
60+
61+
'' L/R/TRIM( wstring, any pattern )
62+
#macro check_rtlfunc_any( rtlfunc, text, pattern )
63+
scope
64+
dim t as wstring * 50 = text
65+
dim u as ustring = t
66+
67+
CU_ASSERT( t = text )
68+
CU_ASSERT( u = t )
69+
70+
dim tf as wstring * 50 = pattern
71+
dim uf as ustring = tf
72+
73+
'' wstring, udt
74+
scope
75+
dim rt as wstring * 50 = rtlfunc( t, any tf )
76+
dim ru as wstring * 50 = rtlfunc( t, any uf )
77+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
78+
end scope
79+
80+
'' udt, wstring
81+
scope
82+
dim rt as wstring * 50 = rtlfunc( t, any tf )
83+
dim ru as wstring * 50 = rtlfunc( u, any tf )
84+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
85+
end scope
86+
87+
'' udt, udt
88+
scope
89+
dim rt as wstring * 50 = rtlfunc( t, any tf )
90+
dim ru as wstring * 50 = rtlfunc( u, any uf )
91+
CU_ASSERT_WSTRING_EQUAL( rt, ru )
92+
end scope
93+
94+
end scope
95+
#endmacro
96+
97+
#macro check( text )
98+
check_rtlfunc( ltrim, text )
99+
check_rtlfunc( rtrim, text )
100+
check_rtlfunc( trim, text )
101+
#endmacro
102+
103+
#macro check_filter( text, pattern )
104+
check_rtlfunc_filter( ltrim, text, pattern )
105+
check_rtlfunc_filter( rtrim, text, pattern )
106+
check_rtlfunc_filter( trim, text, pattern )
107+
#endmacro
108+
109+
#macro check_any( text, pattern )
110+
check_rtlfunc_any( ltrim, text, pattern )
111+
check_rtlfunc_any( rtrim, text, pattern )
112+
check_rtlfunc_any( trim, text, pattern )
113+
#endmacro
114+
115+
116+
TEST( default )
117+
check( "" )
118+
check( " " )
119+
check( " " )
120+
check( "abcde" )
121+
check( " abcde" )
122+
check( "abcde " )
123+
check( " abcde " )
124+
check( !"\u3041\u3043\u3045\u3047\u3049" )
125+
check( !" \u3041\u3043\u3045\u3047\u3049" )
126+
check( !"\u3041\u3043\u3045\u3047\u3049 " )
127+
check( !" \u3041\u3043\u3045\u3047\u3049 " )
128+
129+
check_filter( "", "" )
130+
check_filter( "", " " )
131+
check_filter( " ", "" )
132+
check_filter( " ", " " )
133+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041" )
134+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041\u3043" )
135+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3043\u3041" )
136+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3049" )
137+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3047\u3049" )
138+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3049\u3047" )
139+
check_filter( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041\u3049" )
140+
141+
check_any( "", "" )
142+
check_any( "", " " )
143+
check_any( " ", "" )
144+
check_any( " ", " " )
145+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041" )
146+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041\u3043" )
147+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3043\u3041" )
148+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3049" )
149+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3047\u3049" )
150+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3049\u3047" )
151+
check_any( !"\u3041\u3043\u3045\u3047\u3049", !"\u3041\u3049" )
152+
153+
END_TEST
154+
155+
END_SUITE

tests/udt-zstring/trim.bas

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
#include "fbcunit.bi"
2+
#include once "uzstring-fixed.bi"
3+
#include once "chk-zstring.bi"
4+
5+
#define ustring UZSTRING_FIXED
6+
7+
SUITE( fbc_tests.udt_zstring_.trim_ )
8+
9+
'' L/R/TRIM( zstring )
10+
#macro check_rtlfunc( rtlfunc, text )
11+
scope
12+
dim t as zstring * 50 = text
13+
dim u as ustring = t
14+
15+
CU_ASSERT( t = text )
16+
CU_ASSERT( u = t )
17+
18+
dim rt as zstring * 50 = rtlfunc( t )
19+
dim ru as zstring * 50 = rtlfunc( u )
20+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
21+
22+
end scope
23+
#endmacro
24+
25+
'' L/R/TRIM( zstring, pattern )
26+
#macro check_rtlfunc_filter( rtlfunc, text, pattern )
27+
scope
28+
dim t as zstring * 50 = text
29+
dim u as ustring = t
30+
31+
CU_ASSERT( t = text )
32+
CU_ASSERT( u = t )
33+
34+
dim tf as zstring * 50 = pattern
35+
dim uf as ustring = tf
36+
37+
'' zstring, udt
38+
scope
39+
dim rt as zstring * 50 = rtlfunc( t, tf )
40+
dim ru as zstring * 50 = rtlfunc( t, uf )
41+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
42+
end scope
43+
44+
'' udt, zstring
45+
scope
46+
dim rt as zstring * 50 = rtlfunc( t, tf )
47+
dim ru as zstring * 50 = rtlfunc( u, tf )
48+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
49+
end scope
50+
51+
'' udt, udt
52+
scope
53+
dim rt as zstring * 50 = rtlfunc( t, tf )
54+
dim ru as zstring * 50 = rtlfunc( u, uf )
55+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
56+
end scope
57+
58+
end scope
59+
#endmacro
60+
61+
'' L/R/TRIM( zstring, any pattern )
62+
#macro check_rtlfunc_any( rtlfunc, text, pattern )
63+
scope
64+
dim t as zstring * 50 = text
65+
dim u as ustring = t
66+
67+
CU_ASSERT( t = text )
68+
CU_ASSERT( u = t )
69+
70+
dim tf as zstring * 50 = pattern
71+
dim uf as ustring = tf
72+
73+
'' zstring, udt
74+
scope
75+
dim rt as zstring * 50 = rtlfunc( t, any tf )
76+
dim ru as zstring * 50 = rtlfunc( t, any uf )
77+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
78+
end scope
79+
80+
'' udt, zstring
81+
scope
82+
dim rt as zstring * 50 = rtlfunc( t, any tf )
83+
dim ru as zstring * 50 = rtlfunc( u, any tf )
84+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
85+
end scope
86+
87+
'' udt, udt
88+
scope
89+
dim rt as zstring * 50 = rtlfunc( t, any tf )
90+
dim ru as zstring * 50 = rtlfunc( u, any uf )
91+
CU_ASSERT_ZSTRING_EQUAL( rt, ru )
92+
end scope
93+
94+
end scope
95+
#endmacro
96+
97+
#macro check( s )
98+
check_rtlfunc( ltrim, s )
99+
check_rtlfunc( rtrim, s )
100+
check_rtlfunc( trim, s )
101+
#endmacro
102+
103+
#macro check_filter( s, f )
104+
check_rtlfunc_filter( ltrim, s, f )
105+
check_rtlfunc_filter( rtrim, s, f )
106+
check_rtlfunc_filter( trim, s, f )
107+
#endmacro
108+
109+
#macro check_any( s, f )
110+
check_rtlfunc_any( ltrim, s, f )
111+
check_rtlfunc_any( rtrim, s, f )
112+
check_rtlfunc_any( trim, s, f )
113+
#endmacro
114+
115+
TEST( default )
116+
check( "" )
117+
check( " " )
118+
check( " " )
119+
check( "abcde" )
120+
check( " abcde" )
121+
check( "abcde " )
122+
check( " abcde " )
123+
124+
check_filter( "", "" )
125+
check_filter( "", " " )
126+
check_filter( " ", "" )
127+
check_filter( " ", " " )
128+
check_filter( "abcde", "a" )
129+
check_filter( "abcde", "ab" )
130+
check_filter( "abcde", "ba" )
131+
check_filter( "abcde", "e" )
132+
check_filter( "abcde", "de" )
133+
check_filter( "abcde", "ed" )
134+
check_filter( "abcde", "ae" )
135+
136+
137+
check_any( "", "" )
138+
check_any( "", " " )
139+
check_any( " ", "" )
140+
check_any( " ", " " )
141+
check_any( "abcde", "a" )
142+
check_any( "abcde", "ab" )
143+
check_any( "abcde", "ba" )
144+
check_any( "abcde", "e" )
145+
check_any( "abcde", "de" )
146+
check_any( "abcde", "ed" )
147+
check_any( "abcde", "ae" )
148+
149+
END_TEST
150+
151+
END_SUITE

0 commit comments

Comments
 (0)