--- /dev/null
+--TEST--
+Test ctype_alnum() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_alnum() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'abcXYZ';
+$c2 = ' \t*@';
+
+var_dump(ctype_alnum($c1));
+var_dump(ctype_alnum($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alnum() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+// Zero arguments
+echo "\n-- Testing ctype_alnum() function with Zero arguments --\n";
+var_dump( ctype_alnum() );
+
+//Test ctype_alnum with one more than the expected number of arguments
+echo "\n-- Testing ctype_alnum() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_alnum($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : error conditions ***
+
+-- Testing ctype_alnum() function with Zero arguments --
+
+Warning: ctype_alnum() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_alnum() function with more than expected no. of arguments --
+
+Warning: ctype_alnum() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alnum() function : usage variations - Different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "xyz";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+123
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "pqr",
+ 'LMN',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_alnum()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_alnum($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alnum() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_alnum() to test which character codes are considered
+ * valid alphanumeric characters
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_alnum($i)) {
+ echo "character code $i is alpha numeric\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+character code 48 is alpha numeric
+character code 49 is alpha numeric
+character code 50 is alpha numeric
+character code 51 is alpha numeric
+character code 52 is alpha numeric
+character code 53 is alpha numeric
+character code 54 is alpha numeric
+character code 55 is alpha numeric
+character code 56 is alpha numeric
+character code 57 is alpha numeric
+character code 65 is alpha numeric
+character code 66 is alpha numeric
+character code 67 is alpha numeric
+character code 68 is alpha numeric
+character code 69 is alpha numeric
+character code 70 is alpha numeric
+character code 71 is alpha numeric
+character code 72 is alpha numeric
+character code 73 is alpha numeric
+character code 74 is alpha numeric
+character code 75 is alpha numeric
+character code 76 is alpha numeric
+character code 77 is alpha numeric
+character code 78 is alpha numeric
+character code 79 is alpha numeric
+character code 80 is alpha numeric
+character code 81 is alpha numeric
+character code 82 is alpha numeric
+character code 83 is alpha numeric
+character code 84 is alpha numeric
+character code 85 is alpha numeric
+character code 86 is alpha numeric
+character code 87 is alpha numeric
+character code 88 is alpha numeric
+character code 89 is alpha numeric
+character code 90 is alpha numeric
+character code 97 is alpha numeric
+character code 98 is alpha numeric
+character code 99 is alpha numeric
+character code 100 is alpha numeric
+character code 101 is alpha numeric
+character code 102 is alpha numeric
+character code 103 is alpha numeric
+character code 104 is alpha numeric
+character code 105 is alpha numeric
+character code 106 is alpha numeric
+character code 107 is alpha numeric
+character code 108 is alpha numeric
+character code 109 is alpha numeric
+character code 110 is alpha numeric
+character code 111 is alpha numeric
+character code 112 is alpha numeric
+character code 113 is alpha numeric
+character code 114 is alpha numeric
+character code 115 is alpha numeric
+character code 116 is alpha numeric
+character code 117 is alpha numeric
+character code 118 is alpha numeric
+character code 119 is alpha numeric
+character code 120 is alpha numeric
+character code 121 is alpha numeric
+character code 122 is alpha numeric
+character code 170 is alpha numeric
+character code 181 is alpha numeric
+character code 186 is alpha numeric
+character code 192 is alpha numeric
+character code 193 is alpha numeric
+character code 194 is alpha numeric
+character code 195 is alpha numeric
+character code 196 is alpha numeric
+character code 197 is alpha numeric
+character code 198 is alpha numeric
+character code 199 is alpha numeric
+character code 200 is alpha numeric
+character code 201 is alpha numeric
+character code 202 is alpha numeric
+character code 203 is alpha numeric
+character code 204 is alpha numeric
+character code 205 is alpha numeric
+character code 206 is alpha numeric
+character code 207 is alpha numeric
+character code 208 is alpha numeric
+character code 209 is alpha numeric
+character code 210 is alpha numeric
+character code 211 is alpha numeric
+character code 212 is alpha numeric
+character code 213 is alpha numeric
+character code 214 is alpha numeric
+character code 216 is alpha numeric
+character code 217 is alpha numeric
+character code 218 is alpha numeric
+character code 219 is alpha numeric
+character code 220 is alpha numeric
+character code 221 is alpha numeric
+character code 222 is alpha numeric
+character code 223 is alpha numeric
+character code 224 is alpha numeric
+character code 225 is alpha numeric
+character code 226 is alpha numeric
+character code 227 is alpha numeric
+character code 228 is alpha numeric
+character code 229 is alpha numeric
+character code 230 is alpha numeric
+character code 231 is alpha numeric
+character code 232 is alpha numeric
+character code 233 is alpha numeric
+character code 234 is alpha numeric
+character code 235 is alpha numeric
+character code 236 is alpha numeric
+character code 237 is alpha numeric
+character code 238 is alpha numeric
+character code 239 is alpha numeric
+character code 240 is alpha numeric
+character code 241 is alpha numeric
+character code 242 is alpha numeric
+character code 243 is alpha numeric
+character code 244 is alpha numeric
+character code 245 is alpha numeric
+character code 246 is alpha numeric
+character code 248 is alpha numeric
+character code 249 is alpha numeric
+character code 250 is alpha numeric
+character code 251 is alpha numeric
+character code 252 is alpha numeric
+character code 253 is alpha numeric
+character code 254 is alpha numeric
+character code 255 is alpha numeric
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alnum() function : usage variations - different string values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different strings to ctype_alnum to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+
+// loop through each element of $values to test behaviour of ctype_alnum()
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_alnum($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alnum() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array (060, 061, 062, 063);
+$hex_values = array(0x30, 0x31, 0x32, 0x33);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_alnum($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_alnum($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_alpha() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'abcXYZ';
+$c2 = "Hello, World!";
+
+var_dump(ctype_alpha($c1));
+var_dump(ctype_alpha($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : error conditions - Incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_alpha() function with Zero arguments --\n";
+var_dump( ctype_alpha() );
+
+//Test ctype_alpha with one more than the expected number of arguments
+echo "\n-- Testing ctype_alpha() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_alpha($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : error conditions ***
+
+-- Testing ctype_alpha() function with Zero arguments --
+
+Warning: ctype_alpha() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_alpha() function with more than expected no. of arguments --
+
+Warning: ctype_alpha() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "abcdef";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+XYZ
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_alpha()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_alpha($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_alpha() to test which character codes are considered
+ * valid alphabetic characters
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_alpha($i)) {
+ echo "character code $i is alphabetic\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+character code 65 is alphabetic
+character code 66 is alphabetic
+character code 67 is alphabetic
+character code 68 is alphabetic
+character code 69 is alphabetic
+character code 70 is alphabetic
+character code 71 is alphabetic
+character code 72 is alphabetic
+character code 73 is alphabetic
+character code 74 is alphabetic
+character code 75 is alphabetic
+character code 76 is alphabetic
+character code 77 is alphabetic
+character code 78 is alphabetic
+character code 79 is alphabetic
+character code 80 is alphabetic
+character code 81 is alphabetic
+character code 82 is alphabetic
+character code 83 is alphabetic
+character code 84 is alphabetic
+character code 85 is alphabetic
+character code 86 is alphabetic
+character code 87 is alphabetic
+character code 88 is alphabetic
+character code 89 is alphabetic
+character code 90 is alphabetic
+character code 97 is alphabetic
+character code 98 is alphabetic
+character code 99 is alphabetic
+character code 100 is alphabetic
+character code 101 is alphabetic
+character code 102 is alphabetic
+character code 103 is alphabetic
+character code 104 is alphabetic
+character code 105 is alphabetic
+character code 106 is alphabetic
+character code 107 is alphabetic
+character code 108 is alphabetic
+character code 109 is alphabetic
+character code 110 is alphabetic
+character code 111 is alphabetic
+character code 112 is alphabetic
+character code 113 is alphabetic
+character code 114 is alphabetic
+character code 115 is alphabetic
+character code 116 is alphabetic
+character code 117 is alphabetic
+character code 118 is alphabetic
+character code 119 is alphabetic
+character code 120 is alphabetic
+character code 121 is alphabetic
+character code 122 is alphabetic
+character code 170 is alphabetic
+character code 181 is alphabetic
+character code 186 is alphabetic
+character code 192 is alphabetic
+character code 193 is alphabetic
+character code 194 is alphabetic
+character code 195 is alphabetic
+character code 196 is alphabetic
+character code 197 is alphabetic
+character code 198 is alphabetic
+character code 199 is alphabetic
+character code 200 is alphabetic
+character code 201 is alphabetic
+character code 202 is alphabetic
+character code 203 is alphabetic
+character code 204 is alphabetic
+character code 205 is alphabetic
+character code 206 is alphabetic
+character code 207 is alphabetic
+character code 208 is alphabetic
+character code 209 is alphabetic
+character code 210 is alphabetic
+character code 211 is alphabetic
+character code 212 is alphabetic
+character code 213 is alphabetic
+character code 214 is alphabetic
+character code 216 is alphabetic
+character code 217 is alphabetic
+character code 218 is alphabetic
+character code 219 is alphabetic
+character code 220 is alphabetic
+character code 221 is alphabetic
+character code 222 is alphabetic
+character code 223 is alphabetic
+character code 224 is alphabetic
+character code 225 is alphabetic
+character code 226 is alphabetic
+character code 227 is alphabetic
+character code 228 is alphabetic
+character code 229 is alphabetic
+character code 230 is alphabetic
+character code 231 is alphabetic
+character code 232 is alphabetic
+character code 233 is alphabetic
+character code 234 is alphabetic
+character code 235 is alphabetic
+character code 236 is alphabetic
+character code 237 is alphabetic
+character code 238 is alphabetic
+character code 239 is alphabetic
+character code 240 is alphabetic
+character code 241 is alphabetic
+character code 242 is alphabetic
+character code 243 is alphabetic
+character code 244 is alphabetic
+character code 245 is alphabetic
+character code 246 is alphabetic
+character code 248 is alphabetic
+character code 249 is alphabetic
+character code 250 is alphabetic
+character code 251 is alphabetic
+character code 252 is alphabetic
+character code 253 is alphabetic
+character code 254 is alphabetic
+character code 255 is alphabetic
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_alpha() to test
+ * which are considered valid alphabetic character only strings
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+
+// loop through each element of $values to test behaviour of ctype_alnum()
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_alpha($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_alpha() function : usage variations - Octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array (0101, 0102, 0103, 0104);
+$hex_values = array (0x41, 0x42, 0x43, 0x44);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_alpha($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_alpha($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_cntrl() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = "\r\n\t";
+$c2 = "Hello, World!\n";
+
+var_dump(ctype_cntrl($c1));
+var_dump(ctype_cntrl($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_cntrl() function with Zero arguments --\n";
+var_dump( ctype_cntrl() );
+
+//Test ctype_cntrl with one more than the expected number of arguments
+echo "\n-- Testing ctype_cntrl() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_cntrl($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : error conditions ***
+
+-- Testing ctype_cntrl() function with Zero arguments --
+
+Warning: ctype_cntrl() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_cntrl() function with more than expected no. of arguments --
+
+Warning: ctype_cntrl() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : usage variations - Different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "\n\r\t";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+\t\r\n
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "\t\r\n",
+ '
+',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_cntrl()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_cntrl($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Iteration 1 --
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_cntrl() to test which character codes are considered
+ * valid control characters
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_cntrl($i)) {
+ echo "character code $i is control character\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+character code 0 is control character
+character code 1 is control character
+character code 2 is control character
+character code 3 is control character
+character code 4 is control character
+character code 5 is control character
+character code 6 is control character
+character code 7 is control character
+character code 8 is control character
+character code 9 is control character
+character code 10 is control character
+character code 11 is control character
+character code 12 is control character
+character code 13 is control character
+character code 14 is control character
+character code 15 is control character
+character code 16 is control character
+character code 17 is control character
+character code 18 is control character
+character code 19 is control character
+character code 20 is control character
+character code 21 is control character
+character code 22 is control character
+character code 23 is control character
+character code 24 is control character
+character code 25 is control character
+character code 26 is control character
+character code 27 is control character
+character code 28 is control character
+character code 29 is control character
+character code 30 is control character
+character code 31 is control character
+character code 127 is control character
+character code 128 is control character
+character code 129 is control character
+character code 130 is control character
+character code 131 is control character
+character code 132 is control character
+character code 133 is control character
+character code 134 is control character
+character code 135 is control character
+character code 136 is control character
+character code 137 is control character
+character code 138 is control character
+character code 139 is control character
+character code 140 is control character
+character code 141 is control character
+character code 142 is control character
+character code 143 is control character
+character code 144 is control character
+character code 145 is control character
+character code 146 is control character
+character code 147 is control character
+character code 148 is control character
+character code 149 is control character
+character code 150 is control character
+character code 151 is control character
+character code 152 is control character
+character code 153 is control character
+character code 154 is control character
+character code 155 is control character
+character code 156 is control character
+character code 157 is control character
+character code 158 is control character
+character code 159 is control character
+character code 173 is control character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : usage variations - Different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_cntrl() to test
+ * which are considered valid control character only strings
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "\n",
+/*25*/ "\r",
+ "\t",
+ "0xD",
+ "0xA",
+ "0xE",
+/*30*/ "\t\r\n",
+);
+
+
+// loop through each element of $values to test behaviour of ctype_cntrl()
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_cntrl($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(true)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(true)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+
+-- Iteration 29 --
+bool(false)
+
+-- Iteration 30 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_cntrl() function : usage variations - Octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass hexadecimal and octal values to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(01, 02, 03, 04);
+$hex_values = array(0x1, 0x2, 0x3, 0x4);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_cntrl($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_cntrl($c));
+ $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_digit() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = '1234';
+$c2 = 'abc123';
+
+var_dump(ctype_digit($c1));
+var_dump(ctype_digit($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : error conditions - incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_digit() function with Zero arguments --\n";
+var_dump( ctype_digit() );
+
+//Test ctype_digit with one more than the expected number of arguments
+echo "\n-- Testing ctype_digit() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_digit($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : error conditions ***
+
+-- Testing ctype_digit() function with Zero arguments --
+
+Warning: ctype_digit() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_digit() function with more than expected no. of arguments --
+
+Warning: ctype_digit() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "123456";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+1
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "2",
+ '309',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_digit()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_digit($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_digit() to test which character codes are considered
+ * valid decimal digits
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_digit($i)) {
+ echo "character code $i is a numeric digit\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+character code 48 is a numeric digit
+character code 49 is a numeric digit
+character code 50 is a numeric digit
+character code 51 is a numeric digit
+character code 52 is a numeric digit
+character code 53 is a numeric digit
+character code 54 is a numeric digit
+character code 55 is a numeric digit
+character code 56 is a numeric digit
+character code 57 is a numeric digit
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_digit() to test
+ * which are considered valid decimal digit only strings
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ ")speci@! ch@r$(",
+ '@!$*',
+ "0",
+/*15*/ "3",
+ "9",
+ "1234",
+ "7890",
+ "0677",
+/*20*/ '0',
+ '3',
+ '9',
+ '1234',
+ '7890',
+/*25*/ "123abc",
+ "abc123",
+ "123\r\t",
+ "123 ",
+ " 123",
+/*30*/ "123E4",
+/*31*/ "0x3F",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_digit($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(true)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+
+-- Iteration 29 --
+bool(false)
+
+-- Iteration 30 --
+bool(false)
+
+-- Iteration 31 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_digit() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values as $c argument to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(061, 062, 063, 064);
+$hex_values = array (0x31, 0x32, 0x33, 0x34);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_digit($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_digit($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_graph() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'helloWorld!';
+$c2 = "Hello, world!\n";
+
+var_dump(ctype_graph($c1));
+var_dump(ctype_graph($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : error conditions - incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_graph() function with Zero arguments --\n";
+var_dump( ctype_graph() );
+
+//Test ctype_graph with one more than the expected number of arguments
+echo "\n-- Testing ctype_graph() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_graph($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : error conditions ***
+
+-- Testing ctype_graph() function with Zero arguments --
+
+Warning: ctype_graph() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_graph() function with more than expected no. of arguments --
+
+Warning: ctype_graph() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "myClass";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hiWorld!
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_graph()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_graph($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(true)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_graph() to test which character codes are considered
+ * valid visibly printable characters
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_graph($i)) {
+ echo "character code $i is a printable character\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+character code 33 is a printable character
+character code 34 is a printable character
+character code 35 is a printable character
+character code 36 is a printable character
+character code 37 is a printable character
+character code 38 is a printable character
+character code 39 is a printable character
+character code 40 is a printable character
+character code 41 is a printable character
+character code 42 is a printable character
+character code 43 is a printable character
+character code 44 is a printable character
+character code 45 is a printable character
+character code 46 is a printable character
+character code 47 is a printable character
+character code 48 is a printable character
+character code 49 is a printable character
+character code 50 is a printable character
+character code 51 is a printable character
+character code 52 is a printable character
+character code 53 is a printable character
+character code 54 is a printable character
+character code 55 is a printable character
+character code 56 is a printable character
+character code 57 is a printable character
+character code 58 is a printable character
+character code 59 is a printable character
+character code 60 is a printable character
+character code 61 is a printable character
+character code 62 is a printable character
+character code 63 is a printable character
+character code 64 is a printable character
+character code 65 is a printable character
+character code 66 is a printable character
+character code 67 is a printable character
+character code 68 is a printable character
+character code 69 is a printable character
+character code 70 is a printable character
+character code 71 is a printable character
+character code 72 is a printable character
+character code 73 is a printable character
+character code 74 is a printable character
+character code 75 is a printable character
+character code 76 is a printable character
+character code 77 is a printable character
+character code 78 is a printable character
+character code 79 is a printable character
+character code 80 is a printable character
+character code 81 is a printable character
+character code 82 is a printable character
+character code 83 is a printable character
+character code 84 is a printable character
+character code 85 is a printable character
+character code 86 is a printable character
+character code 87 is a printable character
+character code 88 is a printable character
+character code 89 is a printable character
+character code 90 is a printable character
+character code 91 is a printable character
+character code 92 is a printable character
+character code 93 is a printable character
+character code 94 is a printable character
+character code 95 is a printable character
+character code 96 is a printable character
+character code 97 is a printable character
+character code 98 is a printable character
+character code 99 is a printable character
+character code 100 is a printable character
+character code 101 is a printable character
+character code 102 is a printable character
+character code 103 is a printable character
+character code 104 is a printable character
+character code 105 is a printable character
+character code 106 is a printable character
+character code 107 is a printable character
+character code 108 is a printable character
+character code 109 is a printable character
+character code 110 is a printable character
+character code 111 is a printable character
+character code 112 is a printable character
+character code 113 is a printable character
+character code 114 is a printable character
+character code 115 is a printable character
+character code 116 is a printable character
+character code 117 is a printable character
+character code 118 is a printable character
+character code 119 is a printable character
+character code 120 is a printable character
+character code 121 is a printable character
+character code 122 is a printable character
+character code 123 is a printable character
+character code 124 is a printable character
+character code 125 is a printable character
+character code 126 is a printable character
+character code 161 is a printable character
+character code 162 is a printable character
+character code 163 is a printable character
+character code 164 is a printable character
+character code 165 is a printable character
+character code 166 is a printable character
+character code 167 is a printable character
+character code 168 is a printable character
+character code 169 is a printable character
+character code 170 is a printable character
+character code 171 is a printable character
+character code 172 is a printable character
+character code 174 is a printable character
+character code 175 is a printable character
+character code 176 is a printable character
+character code 177 is a printable character
+character code 178 is a printable character
+character code 179 is a printable character
+character code 180 is a printable character
+character code 181 is a printable character
+character code 182 is a printable character
+character code 183 is a printable character
+character code 184 is a printable character
+character code 185 is a printable character
+character code 186 is a printable character
+character code 187 is a printable character
+character code 188 is a printable character
+character code 189 is a printable character
+character code 190 is a printable character
+character code 191 is a printable character
+character code 192 is a printable character
+character code 193 is a printable character
+character code 194 is a printable character
+character code 195 is a printable character
+character code 196 is a printable character
+character code 197 is a printable character
+character code 198 is a printable character
+character code 199 is a printable character
+character code 200 is a printable character
+character code 201 is a printable character
+character code 202 is a printable character
+character code 203 is a printable character
+character code 204 is a printable character
+character code 205 is a printable character
+character code 206 is a printable character
+character code 207 is a printable character
+character code 208 is a printable character
+character code 209 is a printable character
+character code 210 is a printable character
+character code 211 is a printable character
+character code 212 is a printable character
+character code 213 is a printable character
+character code 214 is a printable character
+character code 215 is a printable character
+character code 216 is a printable character
+character code 217 is a printable character
+character code 218 is a printable character
+character code 219 is a printable character
+character code 220 is a printable character
+character code 221 is a printable character
+character code 222 is a printable character
+character code 223 is a printable character
+character code 224 is a printable character
+character code 225 is a printable character
+character code 226 is a printable character
+character code 227 is a printable character
+character code 228 is a printable character
+character code 229 is a printable character
+character code 230 is a printable character
+character code 231 is a printable character
+character code 232 is a printable character
+character code 233 is a printable character
+character code 234 is a printable character
+character code 235 is a printable character
+character code 236 is a printable character
+character code 237 is a printable character
+character code 238 is a printable character
+character code 239 is a printable character
+character code 240 is a printable character
+character code 241 is a printable character
+character code 242 is a printable character
+character code 243 is a printable character
+character code 244 is a printable character
+character code 245 is a printable character
+character code 246 is a printable character
+character code 247 is a printable character
+character code 248 is a printable character
+character code 249 is a printable character
+character code 250 is a printable character
+character code 251 is a printable character
+character code 252 is a printable character
+character code 253 is a printable character
+character code 254 is a printable character
+character code 255 is a printable character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_graph() to test
+ * which are considered valid printable character only strings
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ "abc123\n",
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "!$%^&*()_+-={}[]:;@~'#<,>.?/",
+/*25*/ "\"ABC\"",
+ "String\twith\ttabs",
+ "Sample string with newline\n",
+/*28*/ "123 ABC XYZ",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_graph($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(false)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_graph() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(061, 062, 063, 064);
+$hex_values = array (0x31, 0x32, 0x33, 0x34);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_graph($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_graph($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_lower() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'helloworld';
+$c2 = "Hello, world!\n";
+
+var_dump(ctype_lower($c1));
+var_dump(ctype_lower($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_lower() function with Zero arguments --\n";
+var_dump( ctype_lower() );
+
+//Test ctype_lower with one more than the expected number of arguments
+echo "\n-- Testing ctype_lower() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_lower($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : error conditions ***
+
+-- Testing ctype_lower() function with Zero arguments --
+
+Warning: ctype_lower() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_lower() function with more than expected no. of arguments --
+
+Warning: ctype_lower() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "class";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+heredoc
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_lower()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_lower($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_lower() to test which character codes are considered
+ * valid lowercase characters
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_lower($i)) {
+ echo "character code $i is a lower case character\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+character code 97 is a lower case character
+character code 98 is a lower case character
+character code 99 is a lower case character
+character code 100 is a lower case character
+character code 101 is a lower case character
+character code 102 is a lower case character
+character code 103 is a lower case character
+character code 104 is a lower case character
+character code 105 is a lower case character
+character code 106 is a lower case character
+character code 107 is a lower case character
+character code 108 is a lower case character
+character code 109 is a lower case character
+character code 110 is a lower case character
+character code 111 is a lower case character
+character code 112 is a lower case character
+character code 113 is a lower case character
+character code 114 is a lower case character
+character code 115 is a lower case character
+character code 116 is a lower case character
+character code 117 is a lower case character
+character code 118 is a lower case character
+character code 119 is a lower case character
+character code 120 is a lower case character
+character code 121 is a lower case character
+character code 122 is a lower case character
+character code 170 is a lower case character
+character code 181 is a lower case character
+character code 186 is a lower case character
+character code 223 is a lower case character
+character code 224 is a lower case character
+character code 225 is a lower case character
+character code 226 is a lower case character
+character code 227 is a lower case character
+character code 228 is a lower case character
+character code 229 is a lower case character
+character code 230 is a lower case character
+character code 231 is a lower case character
+character code 232 is a lower case character
+character code 233 is a lower case character
+character code 234 is a lower case character
+character code 235 is a lower case character
+character code 236 is a lower case character
+character code 237 is a lower case character
+character code 238 is a lower case character
+character code 239 is a lower case character
+character code 240 is a lower case character
+character code 241 is a lower case character
+character code 242 is a lower case character
+character code 243 is a lower case character
+character code 244 is a lower case character
+character code 245 is a lower case character
+character code 246 is a lower case character
+character code 248 is a lower case character
+character code 249 is a lower case character
+character code 250 is a lower case character
+character code 251 is a lower case character
+character code 252 is a lower case character
+character code 253 is a lower case character
+character code 254 is a lower case character
+character code 255 is a lower case character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_lower() to test
+ * which are considered valid lowercase character only strings
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "abcXYZ",
+/*25*/ "abc xyz",
+/*26*/ "abc+efg*xyz",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_lower($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_lower() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(0141, 0142, 0143, 0144);
+$hex_values = array (0x61, 0x62, 0x63, 0x64);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_lower($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_lower($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_print() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = "Hello, World!";
+$c2 = null;
+
+var_dump(ctype_print($c1));
+var_dump(ctype_print($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_print() function with Zero arguments --\n";
+var_dump( ctype_print() );
+
+//Test ctype_print with one more than the expected number of arguments
+echo "\n-- Testing ctype_print() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_print($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : error conditions ***
+
+-- Testing ctype_print() function with Zero arguments --
+
+Warning: ctype_print() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_print() function with more than expected no. of arguments --
+
+Warning: ctype_print() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_print()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_print($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(true)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_print() to test which character codes are considered
+ * valid printable characters
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_print($i)) {
+ echo "character code $i is a printable character\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+character code 32 is a printable character
+character code 33 is a printable character
+character code 34 is a printable character
+character code 35 is a printable character
+character code 36 is a printable character
+character code 37 is a printable character
+character code 38 is a printable character
+character code 39 is a printable character
+character code 40 is a printable character
+character code 41 is a printable character
+character code 42 is a printable character
+character code 43 is a printable character
+character code 44 is a printable character
+character code 45 is a printable character
+character code 46 is a printable character
+character code 47 is a printable character
+character code 48 is a printable character
+character code 49 is a printable character
+character code 50 is a printable character
+character code 51 is a printable character
+character code 52 is a printable character
+character code 53 is a printable character
+character code 54 is a printable character
+character code 55 is a printable character
+character code 56 is a printable character
+character code 57 is a printable character
+character code 58 is a printable character
+character code 59 is a printable character
+character code 60 is a printable character
+character code 61 is a printable character
+character code 62 is a printable character
+character code 63 is a printable character
+character code 64 is a printable character
+character code 65 is a printable character
+character code 66 is a printable character
+character code 67 is a printable character
+character code 68 is a printable character
+character code 69 is a printable character
+character code 70 is a printable character
+character code 71 is a printable character
+character code 72 is a printable character
+character code 73 is a printable character
+character code 74 is a printable character
+character code 75 is a printable character
+character code 76 is a printable character
+character code 77 is a printable character
+character code 78 is a printable character
+character code 79 is a printable character
+character code 80 is a printable character
+character code 81 is a printable character
+character code 82 is a printable character
+character code 83 is a printable character
+character code 84 is a printable character
+character code 85 is a printable character
+character code 86 is a printable character
+character code 87 is a printable character
+character code 88 is a printable character
+character code 89 is a printable character
+character code 90 is a printable character
+character code 91 is a printable character
+character code 92 is a printable character
+character code 93 is a printable character
+character code 94 is a printable character
+character code 95 is a printable character
+character code 96 is a printable character
+character code 97 is a printable character
+character code 98 is a printable character
+character code 99 is a printable character
+character code 100 is a printable character
+character code 101 is a printable character
+character code 102 is a printable character
+character code 103 is a printable character
+character code 104 is a printable character
+character code 105 is a printable character
+character code 106 is a printable character
+character code 107 is a printable character
+character code 108 is a printable character
+character code 109 is a printable character
+character code 110 is a printable character
+character code 111 is a printable character
+character code 112 is a printable character
+character code 113 is a printable character
+character code 114 is a printable character
+character code 115 is a printable character
+character code 116 is a printable character
+character code 117 is a printable character
+character code 118 is a printable character
+character code 119 is a printable character
+character code 120 is a printable character
+character code 121 is a printable character
+character code 122 is a printable character
+character code 123 is a printable character
+character code 124 is a printable character
+character code 125 is a printable character
+character code 126 is a printable character
+character code 160 is a printable character
+character code 161 is a printable character
+character code 162 is a printable character
+character code 163 is a printable character
+character code 164 is a printable character
+character code 165 is a printable character
+character code 166 is a printable character
+character code 167 is a printable character
+character code 168 is a printable character
+character code 169 is a printable character
+character code 170 is a printable character
+character code 171 is a printable character
+character code 172 is a printable character
+character code 174 is a printable character
+character code 175 is a printable character
+character code 176 is a printable character
+character code 177 is a printable character
+character code 178 is a printable character
+character code 179 is a printable character
+character code 180 is a printable character
+character code 181 is a printable character
+character code 182 is a printable character
+character code 183 is a printable character
+character code 184 is a printable character
+character code 185 is a printable character
+character code 186 is a printable character
+character code 187 is a printable character
+character code 188 is a printable character
+character code 189 is a printable character
+character code 190 is a printable character
+character code 191 is a printable character
+character code 192 is a printable character
+character code 193 is a printable character
+character code 194 is a printable character
+character code 195 is a printable character
+character code 196 is a printable character
+character code 197 is a printable character
+character code 198 is a printable character
+character code 199 is a printable character
+character code 200 is a printable character
+character code 201 is a printable character
+character code 202 is a printable character
+character code 203 is a printable character
+character code 204 is a printable character
+character code 205 is a printable character
+character code 206 is a printable character
+character code 207 is a printable character
+character code 208 is a printable character
+character code 209 is a printable character
+character code 210 is a printable character
+character code 211 is a printable character
+character code 212 is a printable character
+character code 213 is a printable character
+character code 214 is a printable character
+character code 215 is a printable character
+character code 216 is a printable character
+character code 217 is a printable character
+character code 218 is a printable character
+character code 219 is a printable character
+character code 220 is a printable character
+character code 221 is a printable character
+character code 222 is a printable character
+character code 223 is a printable character
+character code 224 is a printable character
+character code 225 is a printable character
+character code 226 is a printable character
+character code 227 is a printable character
+character code 228 is a printable character
+character code 229 is a printable character
+character code 230 is a printable character
+character code 231 is a printable character
+character code 232 is a printable character
+character code 233 is a printable character
+character code 234 is a printable character
+character code 235 is a printable character
+character code 236 is a printable character
+character code 237 is a printable character
+character code 238 is a printable character
+character code 239 is a printable character
+character code 240 is a printable character
+character code 241 is a printable character
+character code 242 is a printable character
+character code 243 is a printable character
+character code 244 is a printable character
+character code 245 is a printable character
+character code 246 is a printable character
+character code 247 is a printable character
+character code 248 is a printable character
+character code 249 is a printable character
+character code 250 is a printable character
+character code 251 is a printable character
+character code 252 is a printable character
+character code 253 is a printable character
+character code 254 is a printable character
+character code 255 is a printable character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_print() to test
+ * which are considered valid printable character only strings
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ "abc123\n",
+/*20*/ 'abc 123',
+ '',
+ ' ',
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_print($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Iteration 1 --
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(true)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(true)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_print() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(040, 041, 042, 043);
+$hex_values = array (0x20, 0x21, 0x23, 0x24);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_print($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_print($c));
+ $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_punct() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = '@!$*';
+$c2 = 'hello, world!';
+
+var_dump(ctype_punct($c1));
+var_dump(ctype_punct($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_punct() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+// Zero arguments
+echo "\n-- Testing ctype_punct() function with Zero arguments --\n";
+var_dump( ctype_punct() );
+
+//Test ctype_punct with one more than the expected number of arguments
+echo "\n-- Testing ctype_punct() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_punct($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : error conditions ***
+
+-- Testing ctype_punct() function with Zero arguments --
+
+Warning: ctype_punct() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_punct() function with more than expected no. of arguments --
+
+Warning: ctype_punct() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : usage variations - different data types as $c argument
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_punt() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return ",<.>";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+[{}]
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ ";:'@",
+ '#~/?',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_punct
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_punct($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_punct() to test which character codes are considered
+ * valid punctuation characters
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($c = 1; $c < 256; $c++) {
+ if (ctype_punct($c)) {
+ echo "character code $c is punctuation\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+character code 33 is punctuation
+character code 34 is punctuation
+character code 35 is punctuation
+character code 37 is punctuation
+character code 38 is punctuation
+character code 39 is punctuation
+character code 40 is punctuation
+character code 41 is punctuation
+character code 42 is punctuation
+character code 44 is punctuation
+character code 45 is punctuation
+character code 46 is punctuation
+character code 47 is punctuation
+character code 58 is punctuation
+character code 59 is punctuation
+character code 63 is punctuation
+character code 64 is punctuation
+character code 91 is punctuation
+character code 92 is punctuation
+character code 93 is punctuation
+character code 95 is punctuation
+character code 123 is punctuation
+character code 125 is punctuation
+character code 161 is punctuation
+character code 171 is punctuation
+character code 183 is punctuation
+character code 187 is punctuation
+character code 191 is punctuation
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : usage variations - different punctuation
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_punct() to test
+ * which are considered valid punctuation character only strings
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ "abc123\n",
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "!$%@\n",
+/*25*/ "\"?!\"",
+/*26*/ "|\ @~",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_punct($value) );
+ $iterator++;
+};
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_punct() function : usage variations - Octal and Hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace
+ * or an alphanumeric character
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different octal and hexadecimal values to ctype_punct() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(045, 046, 047, 050);
+$hex_values = array(0x25, 0x26, 0x27, 0x28);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_punct($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_punct($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_space() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = " \t\r\n";
+var_dump(ctype_space($c1));
+
+$c2 = "Hello, world!\n";
+var_dump(ctype_space($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+// Zero arguments
+echo "\n-- Testing ctype_space() function with Zero arguments --\n";
+var_dump( ctype_space() );
+
+//Test ctype_space with one more than the expected number of arguments
+echo "\n-- Testing ctype_space() function with more than expected no. of arguments --\n";
+$c = " ";
+$extra_arg = 10;
+var_dump( ctype_space($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : error conditions ***
+
+-- Testing ctype_space() function with Zero arguments --
+
+Warning: ctype_space() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_space() function with more than expected no. of arguments --
+
+Warning: ctype_space() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : usage variations - different data types as $c argument
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "\n\t\r";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "\n\t\r",
+ ' ',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_space()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_space($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_space() to test which character codes are considered
+ * valid whitespace characters
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($c = 1; $c < 256; $c++) {
+ if (ctype_space($c)) {
+ echo "character code $c is a space character\n";
+ }
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+character code 9 is a space character
+character code 10 is a space character
+character code 11 is a space character
+character code 12 is a space character
+character code 13 is a space character
+character code 28 is a space character
+character code 29 is a space character
+character code 30 is a space character
+character code 31 is a space character
+character code 32 is a space character
+character code 133 is a space character
+character code 160 is a space character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_space() to test
+ * which are considered valid whitespace character only strings
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ "abc123\n",
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "\"\n",
+/*25*/ " \t\r\n",
+/*26*/ "\v\f",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_space($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(true)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(true)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_space() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values as $c to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array (011, 012, 013, 014, 015, 040);
+$hex_values = array (0x9, 0xA, 0xB, 0xC, 0xD, 0x20);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_space($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_space($c));
+ $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+-- Iteration 5 --
+bool(true)
+-- Iteration 6 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+-- Iteration 5 --
+bool(true)
+-- Iteration 6 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_upper() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'HELLOWORLD';
+$c2 = "Hello, World!\n";
+
+var_dump(ctype_upper($c1));
+var_dump(ctype_upper($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_upper() function with Zero arguments --\n";
+var_dump( ctype_upper() );
+
+//Test ctype_upper with one more than the expected number of arguments
+echo "\n-- Testing ctype_upper() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_upper($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : error conditions ***
+
+-- Testing ctype_upper() function with Zero arguments --
+
+Warning: ctype_upper() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_upper() function with more than expected no. of arguments --
+
+Warning: ctype_upper() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : usage variations - different data types
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "HELLO";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+HI
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "STRING",
+ 'STRING',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_upper()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_upper($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_upper() to test which character codes are considered
+ * valid uppercase characters
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+ if (ctype_upper($i)) {
+ echo "character code $i is a uppercase character\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+character code 65 is a uppercase character
+character code 66 is a uppercase character
+character code 67 is a uppercase character
+character code 68 is a uppercase character
+character code 69 is a uppercase character
+character code 70 is a uppercase character
+character code 71 is a uppercase character
+character code 72 is a uppercase character
+character code 73 is a uppercase character
+character code 74 is a uppercase character
+character code 75 is a uppercase character
+character code 76 is a uppercase character
+character code 77 is a uppercase character
+character code 78 is a uppercase character
+character code 79 is a uppercase character
+character code 80 is a uppercase character
+character code 81 is a uppercase character
+character code 82 is a uppercase character
+character code 83 is a uppercase character
+character code 84 is a uppercase character
+character code 85 is a uppercase character
+character code 86 is a uppercase character
+character code 87 is a uppercase character
+character code 88 is a uppercase character
+character code 89 is a uppercase character
+character code 90 is a uppercase character
+character code 192 is a uppercase character
+character code 193 is a uppercase character
+character code 194 is a uppercase character
+character code 195 is a uppercase character
+character code 196 is a uppercase character
+character code 197 is a uppercase character
+character code 198 is a uppercase character
+character code 199 is a uppercase character
+character code 200 is a uppercase character
+character code 201 is a uppercase character
+character code 202 is a uppercase character
+character code 203 is a uppercase character
+character code 204 is a uppercase character
+character code 205 is a uppercase character
+character code 206 is a uppercase character
+character code 207 is a uppercase character
+character code 208 is a uppercase character
+character code 209 is a uppercase character
+character code 210 is a uppercase character
+character code 211 is a uppercase character
+character code 212 is a uppercase character
+character code 213 is a uppercase character
+character code 214 is a uppercase character
+character code 216 is a uppercase character
+character code 217 is a uppercase character
+character code 218 is a uppercase character
+character code 219 is a uppercase character
+character code 220 is a uppercase character
+character code 221 is a uppercase character
+character code 222 is a uppercase character
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_upper() to test
+ * which are considered valid uppercase character only strings
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ "abcXYZ",
+/*25*/ "ABC XYZ",
+/*26*/ "ABC+EFG*XYZ",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_upper($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_upper() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(0101, 0102, 0103, 0104);
+$hex_values = array(0x41, 0x42, 0x43, 0x44);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_upper($c));
+ $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+ echo "-- Iteration $iterator --\n";
+ var_dump(ctype_upper($c));
+ $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_xdigit() : basic functionality ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'abcdefABCDEF0123456789';
+$c2 = 'face 034';
+
+var_dump(ctype_xdigit($c1));
+var_dump(ctype_xdigit($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_xdigit() to test behaviour
+ */
+
+echo "*** Testing ctype_xdigit() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_xdigit() function with Zero arguments --\n";
+var_dump( ctype_xdigit() );
+
+//Test ctype_xdigit with one more than the expected number of arguments
+echo "\n-- Testing ctype_xdigit() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_xdigit($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : error conditions ***
+
+-- Testing ctype_xdigit() function with Zero arguments --
+
+Warning: ctype_xdigit() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_xdigit() function with more than expected no. of arguments --
+
+Warning: ctype_xdigit() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : usage variations - different data typse as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_xdigit() to test behaviour
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "ABcd";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+234
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "456",
+ 'def',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_xdigit()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_xdigit($input) );
+ $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_xdigit() to test which character codes are considered
+ * valid hexadecimal 'digits'
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for($c = 1; $c < 256; $c++) {
+ if (ctype_xdigit($c)) {
+ echo "character code $c is a hexadecimal 'digit'\n";
+ }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+character code 48 is a hexadecimal 'digit'
+character code 49 is a hexadecimal 'digit'
+character code 50 is a hexadecimal 'digit'
+character code 51 is a hexadecimal 'digit'
+character code 52 is a hexadecimal 'digit'
+character code 53 is a hexadecimal 'digit'
+character code 54 is a hexadecimal 'digit'
+character code 55 is a hexadecimal 'digit'
+character code 56 is a hexadecimal 'digit'
+character code 57 is a hexadecimal 'digit'
+character code 65 is a hexadecimal 'digit'
+character code 66 is a hexadecimal 'digit'
+character code 67 is a hexadecimal 'digit'
+character code 68 is a hexadecimal 'digit'
+character code 69 is a hexadecimal 'digit'
+character code 70 is a hexadecimal 'digit'
+character code 97 is a hexadecimal 'digit'
+character code 98 is a hexadecimal 'digit'
+character code 99 is a hexadecimal 'digit'
+character code 100 is a hexadecimal 'digit'
+character code 101 is a hexadecimal 'digit'
+character code 102 is a hexadecimal 'digit'
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : usage variations - Different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_xdigit() to test
+ * which are considered valid hexadecimal 'digit' only strings
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/ "This string contains just letters and spaces", // Simple string
+ "but this one contains some numbers too 123+456 = 678", // Mixed string
+ "",
+ " ",
+/*5*/ "a",
+ "ABCXYZ",
+ "abcxyz",
+ "ABCXYZ123DEF456",
+ "abczyz123DEF456",
+/*10*/ "\r\n",
+ "123",
+ "03F", // hexadecimal 'digits'
+ ")speci@! ch@r$(",
+ '@!$*',
+/*15*/ 'ABC',
+ 'abc',
+ 'ABC123',
+ 'abc123',
+ 'abc123\n',
+/*20*/ 'abc 123',
+ '',
+ ' ',
+ base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+ 'ABCdef07',
+ "56ea\tFB",
+ "0x2A"
+ );
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( ctype_xdigit($value) );
+ $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
--- /dev/null
+--TEST--
+Test ctype_xdigit() function : usage variations - heaxadecimal and octal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+ die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different hexadecimal and octal values that:
+ * 1. contain hexadecimal digits
+ * 2. correspond to character codes recognised as hexadecimal digits (see variation2)
+ * referred to as 'correct' integers below
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+// contain hexadecimal digits but do not correspond to 'correct' ints
+$octal_values1 = array(012, 013, 014, 015);
+
+// correspond to 'correct' integers
+$octal_values2 = array(061, 062, 063, 064);
+
+// contain hexadecimal digits but do not correspond to 'correct' ints
+$hex_values1 = array(0x1A, 0x1B, 0x1C, 0x1D);
+
+//correspond to 'correct' integers
+$hex_values2 = array(0x61, 0x62, 0x63, 0x64);
+
+echo "\n-- Octal values --\n";
+echo "'Incorrect' Integers: \n";
+foreach($octal_values1 as $c) {
+ var_dump(ctype_xdigit($c));
+}
+echo "'Correct' Integers: \n";
+foreach($octal_values2 as $c) {
+ var_dump(ctype_xdigit($c));
+}
+
+echo "\n-- Hexadecimal values --\n";
+echo "'Incorrect' Integers: \n";
+foreach($hex_values1 as $c) {
+ var_dump(ctype_xdigit($c));
+}
+echo "'Correct' Integers: \n";
+foreach($hex_values2 as $c) {
+ var_dump(ctype_xdigit($c));
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Octal values --
+'Incorrect' Integers:
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+'Correct' Integers:
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+
+-- Hexadecimal values --
+'Incorrect' Integers:
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+'Correct' Integers:
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+===DONE===