66
77class HelloWorld
88{
9+ private const NUMERIC_STRING_1 = "1 " ;
10+ private const NUMERIC_STRING_NEGATIVE_1 = "-1 " ;
11+
912 public function doFoo ()
1013 {
11- assertType ('list<string>|false ' , preg_split ('/-/ ' , '1-2-3 ' ));
12- assertType ('list<string>|false ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_NO_EMPTY ));
13- assertType ('list<array{string, int<0, max>}>|false ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_OFFSET_CAPTURE ));
14- assertType ('list<array{string, int<0, max>}>|false ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ));
14+ assertType ("array{''}|false " , preg_split ('/-/ ' , '' ));
15+ assertType ("array{}|false " , preg_split ('/-/ ' , '' , -1 , PREG_SPLIT_NO_EMPTY ));
16+ assertType ("array{'1', '-', '2', '-', '3'}|false " , preg_split ('/ *(-) */ ' , '1- 2-3 ' , -1 , PREG_SPLIT_DELIM_CAPTURE ));
17+ assertType ("array{array{'', 0}}|false " , preg_split ('/-/ ' , '' , -1 , PREG_SPLIT_OFFSET_CAPTURE ));
18+ assertType ("array{}|false " , preg_split ('/-/ ' , '' , -1 , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ));
19+ assertType ("array{'1', '2', '3'}|false " , preg_split ('/-/ ' , '1-2-3 ' ));
20+ assertType ("array{'1', '2', '3'}|false " , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_NO_EMPTY ));
21+ assertType ("array{'1', '3'}|false " , preg_split ('/-/ ' , '1--3 ' , -1 , PREG_SPLIT_NO_EMPTY ));
22+ assertType ("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}|false " , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_OFFSET_CAPTURE ));
23+ assertType ("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}|false " , preg_split ('/-/ ' , '1-2-3 ' , -1 , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ));
24+ assertType ("array{array{'1', 0}, array{'', 2}, array{'3', 3}}|false " , preg_split ('/-/ ' , '1--3 ' , -1 , PREG_SPLIT_OFFSET_CAPTURE ));
25+ assertType ("array{array{'1', 0}, array{'3', 3}}|false " , preg_split ('/-/ ' , '1--3 ' , -1 , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ));
26+
27+ assertType ("array{'1', '2', '3'}|false " , preg_split ('/-/ ' , '1-2-3 ' , self ::NUMERIC_STRING_NEGATIVE_1 ));
28+ assertType ("array{'1', '2', '3'}|false " , preg_split ('/-/ ' , '1-2-3 ' , -1 , self ::NUMERIC_STRING_1 ));
29+ }
30+
31+ public function doWithError () {
32+ assertType ('*ERROR* ' , preg_split ('/[0-9a] ' , '1-2-3 ' ));
33+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , 'hogehoge ' ));
34+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , 'hogehoge ' ));
35+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , [], self ::NUMERIC_STRING_NEGATIVE_1 ));
36+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , null , self ::NUMERIC_STRING_NEGATIVE_1 ));
37+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , []));
38+ assertType ('*ERROR* ' , preg_split ('/-/ ' , '1-2-3 ' , -1 , null ));
39+ }
40+
41+ public function doWithVariables (string $ pattern , string $ subject , int $ offset , int $ flags ): void
42+ {
43+ assertType ("array{'1', '2', '3'}|array{'1-2-3'}|false " , preg_split ('/-/ ' , '1-2-3 ' , $ this ->generate ()));
44+ assertType ("array{'1', '2', '3'}|array{'1-2-3'}|false " , preg_split ('/-/ ' , '1-2-3 ' , $ this ->generate (), $ this ->generate ()));
45+
46+ assertType ('list<array{string, int<0, max>}|string>|false ' , preg_split ($ pattern , $ subject , $ offset , $ flags ));
47+ assertType ('list<array{string, int<0, max>}|string>|false ' , preg_split ("// " , $ subject , $ offset , $ flags ));
48+
49+ assertType ('non-empty-list<array{string, int<0, max>}|string>|false ' , preg_split ($ pattern , "1-2-3 " , $ offset , $ flags ));
50+ assertType ('list<array{string, int<0, max>}|string>|false ' , preg_split ($ pattern , $ subject , -1 , $ flags ));
51+ assertType ('list<non-empty-string>|false ' , preg_split ($ pattern , $ subject , $ offset , PREG_SPLIT_NO_EMPTY ));
52+ assertType ('list<array{string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ offset , PREG_SPLIT_OFFSET_CAPTURE ));
53+ assertType ("list<string>|false " , preg_split ($ pattern , $ subject , $ offset , PREG_SPLIT_DELIM_CAPTURE ));
54+ assertType ('list<array{string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ offset , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE ));
55+ }
56+
57+ /**
58+ * @return 1|'17'
59+ */
60+ private function generate (): int |string {
61+ return (rand () % 2 === 0 ) ? 1 : "17 " ;
62+ }
63+
64+ /**
65+ * @param non-empty-string $nonEmptySubject
66+ */
67+ public function doWithNonEmptySubject (string $ pattern , string $ nonEmptySubject , int $ offset , int $ flags ): void
68+ {
69+ assertType ('non-empty-list<string>|false ' , preg_split ("// " , $ nonEmptySubject ));
70+
71+ assertType ('non-empty-list<array{string, int<0, max>}|string>|false ' , preg_split ($ pattern , $ nonEmptySubject , $ offset , $ flags ));
72+ assertType ('non-empty-list<array{string, int<0, max>}|string>|false ' , preg_split ("// " , $ nonEmptySubject , $ offset , $ flags ));
73+
74+ assertType ('non-empty-list<array{string, int<0, max>}>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_OFFSET_CAPTURE ));
75+ assertType ('non-empty-list<non-empty-string>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_NO_EMPTY ));
76+ assertType ('non-empty-list<string>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_DELIM_CAPTURE ));
77+ assertType ('non-empty-list<array{string, int<0, max>}>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE ));
78+ assertType ('non-empty-list<array{non-empty-string, int<0, max>}>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ));
79+ assertType ('non-empty-list<non-empty-string>|false ' , preg_split ("/-/ " , $ nonEmptySubject , $ offset , PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ));
1580 }
1681
1782 /**
@@ -26,16 +91,16 @@ public static function splitWithOffset($pattern, $subject, $limit = -1, $flags =
2691 {
2792 assertType ('list<array{string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ limit , $ flags | PREG_SPLIT_OFFSET_CAPTURE ));
2893 assertType ('list<array{string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ limit , PREG_SPLIT_OFFSET_CAPTURE | $ flags ));
29-
30- assertType ('list<array{string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ limit , PREG_SPLIT_OFFSET_CAPTURE | $ flags | PREG_SPLIT_NO_EMPTY ));
94+ assertType ('list<array{non-empty-string, int<0, max>}>|false ' , preg_split ($ pattern , $ subject , $ limit , PREG_SPLIT_OFFSET_CAPTURE | $ flags | PREG_SPLIT_NO_EMPTY ));
3195 }
3296
3397 /**
3498 * @param string $pattern
3599 * @param string $subject
36100 * @param int $limit
37101 */
38- public static function dynamicFlags ($ pattern , $ subject , $ limit = -1 ) {
102+ public static function dynamicFlags ($ pattern , $ subject , $ limit = -1 )
103+ {
39104 $ flags = PREG_SPLIT_OFFSET_CAPTURE ;
40105
41106 if ($ subject === '1-2-3 ' ) {
0 commit comments