--TEST--
Test is_numeric() function
--FILE--
<?php
/* Prototype: bool is_numeric ( mixed $var );
 * Description: Finds whether a variable is a number or a numeric string  
 */

echo "*** Testing is_numeric() with valid numeric values ***\n";
// different valid numeric  vlaues 
$numerics = array(
  0,
  1,
  -1,
  -0,
  +0,
  0.0,
  -0.0,
  +0.0,
  1.0,
  -1.0,
  +1.0,
  .5,
  -.5,
  +.5,
  -.5e-2,
  .5e-2,
  +.5e-2,
  +.5E+2,
  0.70000000,
  +0.70000000,
  -0.70000000,
  1234567890123456,
  -1234567890123456,
  984847472827282718178,
  -984847472827282718178,
  123.56e30,
  123.56E30,
  426.45e-30,
  5657.3E-40,
  3486.36e+40,
  3486.36E+90,
  -3486.36E+10,
  -3486.36e+80,
  -426.45e-50,
  -426.45E-99,
  1e2,
  -1e2,
  -1e-2,
  +1e2,
  +1e+2,
  +1e-2,
  +1e+2,
  2245555555555555.444,
  1.444444444444444444,
  0xff,	// hexa decimal numbers
  0xFF,
  //0x1111111111111111111111,
  -0x1111111,
  +0x6698319,
  01000000000000000000000, 
  0123,
  0345900,
  -0200001,  
  -0200001.7,  
  0200001.7,  
  +0200001,  
  +0200001.7,  
  +0200001.7,  
  2.00000000000000000000001, // a float value with more precision points
  "1",	// numeric in the form of string
  "-1",
  "1e2",
  " 1",
  "2974394749328742328432",
  "-1e-2",
  '1',
  '-1',
  '1e2',
  ' 1',
  '2974394749328742328432',
  '-1e-2',
  "0xff",
  '0xff',
  "0123",
  '0123',
  "-0123",
  "+0123",
  '-0123',
  '+0123'
);
/* loop to check that is_numeric() recognizes different 
   numeric values, expected output: bool(true) */
$loop_counter = 1;
foreach ($numerics as $num ) {
  echo "-- Iteration $loop_counter --\n"; $loop_counter++;
  var_dump( is_numeric($num) );
}

echo "\n*** Testing is_numeric() on non numeric types ***\n";

// get a resource type variable
$fp = fopen (__FILE__, "r");
$dfp = opendir ( dirname(__FILE__) );

// unset variable
$unset_var = 10.5;
unset ($unset_var);

// other types in a array 
$not_numerics = array(
  "-0x80001", 
  "+0x80001", 
  "-0x80001.5",
  "0x80001.5", 
  new stdclass, // object
  $fp,  // resource
  $dfp,
  array(),
  array("string"),
  "",
  "1 ",
  "- 1",
  "1.2.4",
  "1e7.6",
  "3FF",
  "20 test",
  "3.6test",
  "1,000",
  "NULL", 
  "true",
  true,
  NULL,
  null,
  TRUE,
  FALSE,
  false,
  @$unset_var, // unset variable
  @$undefined_var
);
/* loop through the $not_numerics to see working of 
   is_numeric() on non numeric values, expected output: bool(false) */
$loop_counter = 1;
foreach ($not_numerics as $type ) {
  echo "-- Iteration $loop_counter --\n"; $loop_counter++;
  var_dump( is_numeric($type) );
}

echo "\n*** Testing error conditions ***\n";
//Zero argument
var_dump( is_numeric() );

//arguments more than expected 
var_dump( is_numeric("10", "20") );
 
echo "Done\n";

// close the resources used
fclose($fp);
closedir($dfp);

?>
--EXPECTF--
*** Testing is_numeric() with valid numeric 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)
-- Iteration 7 --
bool(true)
-- Iteration 8 --
bool(true)
-- Iteration 9 --
bool(true)
-- Iteration 10 --
bool(true)
-- 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(true)
-- Iteration 20 --
bool(true)
-- Iteration 21 --
bool(true)
-- Iteration 22 --
bool(true)
-- Iteration 23 --
bool(true)
-- Iteration 24 --
bool(true)
-- Iteration 25 --
bool(true)
-- Iteration 26 --
bool(true)
-- Iteration 27 --
bool(true)
-- Iteration 28 --
bool(true)
-- Iteration 29 --
bool(true)
-- Iteration 30 --
bool(true)
-- Iteration 31 --
bool(true)
-- Iteration 32 --
bool(true)
-- Iteration 33 --
bool(true)
-- Iteration 34 --
bool(true)
-- Iteration 35 --
bool(true)
-- Iteration 36 --
bool(true)
-- Iteration 37 --
bool(true)
-- Iteration 38 --
bool(true)
-- Iteration 39 --
bool(true)
-- Iteration 40 --
bool(true)
-- Iteration 41 --
bool(true)
-- Iteration 42 --
bool(true)
-- Iteration 43 --
bool(true)
-- Iteration 44 --
bool(true)
-- Iteration 45 --
bool(true)
-- Iteration 46 --
bool(true)
-- Iteration 47 --
bool(true)
-- Iteration 48 --
bool(true)
-- Iteration 49 --
bool(true)
-- Iteration 50 --
bool(true)
-- Iteration 51 --
bool(true)
-- Iteration 52 --
bool(true)
-- Iteration 53 --
bool(true)
-- Iteration 54 --
bool(true)
-- Iteration 55 --
bool(true)
-- Iteration 56 --
bool(true)
-- Iteration 57 --
bool(true)
-- Iteration 58 --
bool(true)
-- Iteration 59 --
bool(true)
-- Iteration 60 --
bool(true)
-- Iteration 61 --
bool(true)
-- Iteration 62 --
bool(true)
-- Iteration 63 --
bool(true)
-- Iteration 64 --
bool(true)
-- Iteration 65 --
bool(true)
-- Iteration 66 --
bool(true)
-- Iteration 67 --
bool(true)
-- Iteration 68 --
bool(true)
-- Iteration 69 --
bool(true)
-- Iteration 70 --
bool(true)
-- Iteration 71 --
bool(true)
-- Iteration 72 --
bool(true)
-- Iteration 73 --
bool(true)
-- Iteration 74 --
bool(true)
-- Iteration 75 --
bool(true)
-- Iteration 76 --
bool(true)
-- Iteration 77 --
bool(true)
-- Iteration 78 --
bool(true)

*** Testing is_numeric() on non numeric types ***
-- 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(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)
-- Iteration 27 --
bool(false)
-- Iteration 28 --
bool(false)

*** Testing error conditions ***

Warning: is_numeric() expects exactly 1 parameter, 0 given in %s on line %d
NULL

Warning: is_numeric() expects exactly 1 parameter, 2 given in %s on line %d
NULL
Done
