--TEST--
Test intval() function
--SKIPIF--
<?php
if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
?>
--FILE--
<?php
/* Prototype: int intval( mixed $var [.int $base] );
 * Description: Returns the integer value of var, using the specified base for the conversion(the default is base 10).
 */

echo "*** Testing intval() with valid integer values ***\n";
// different valid  integer vlaues 
$valid_ints = array(
                
'0',
                
'1',
                
'-1',
                
'-2147483648'// max negative integer value
                
'-2147483647'
                
2147483647,  // max positive integer value
                
2147483640,
                
0x123B,      // integer as hexadecimal
                
'0x12ab',
                
'0Xfff',
                
'0XFA',
                -
0x80000000// max negative integer as hexadecimal
                
'0x7fffffff',  // max postive integer as hexadecimal
                
0x7FFFFFFF,  // max postive integer as hexadecimal
                
'0123',        // integer as octal
                
01912,       // should be quivalent to octal 1
                
-020000000000// max negative integer as octal
                
017777777777,  // max positive integer as octal
               
);

/* loop to check that intval() recognizes different 
   integer values, expected output:integer value in decimal notation for valid integer */

echo "\n***Output with default base value ie 10 ***\n";
foreach (
$valid_ints as $value ) {
   
var_dumpintval($value) );
}


echo 
"\n***Output with base value of 10( explicitly passed as argument) ***\n";
foreach (
$valid_ints as $value ) {
   
var_dumpintval($value10) );
}

 
echo 
"\n***Output with base value  of 16 ***\n";
foreach (
$valid_ints as $value ) {
   
var_dumpintval($value16) );
}

echo 
"\n***Output with base value of 8 ***\n";
foreach (
$valid_ints as $value ) {
   
var_dumpintval($value8) );
}

echo 
"\n*** Testing intval() on non integer types ***\n";

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

// unset variable

$unset_var 10;
unset (
$unset_var);

// other types in a array
$not_int_types = array (
  
/* float values */
  
'-2147483649'// float value
  
'2147483648',  // float value
  
'-0x80000001'// float value, beyond max negative int
  
'0x800000001'// float value, beyond max positive int
  
'020000000001'// float value, beyond max positive int
  
'-020000000001'// float value, beyond max negative int
  
0.0,
  -
0.1,
  
1.0,
  
1e5,
  -
1e6,
  
1E8,
  -
1E9,
  
10.0000000000000000005,
  
10.5e+5,

  
/* resources */
  
$fp,
  
$dfp,

  
/* arrays */
  
array(),
  array(
0),
  array(
1),
  array(
NULL),
  array(
null),
  array(
"string"),
  array(
true),
  array(
TRUE),
  array(
false),
  array(
FALSE),
  array(
1,2,3,4),
  array(
=> "One""two" => 2),

  
/* strings */
  
"",
  
'',
  
"0",
  
'0',
  
"1",
  
'1',
  
"\x01",
  
'\x01',
  
"\01",
  
'\01',
  
'string',
  
"string",
  
"true",
  
"FALSE",
  
'false',
  
'TRUE',
  
"NULL",
  
'null',

  
/* booleans */
  
true,
  
false,
  
TRUE,
  
FALSE,

  
/* undefined and unset vars */
  
@$unset_var,
  @
$undefined_var
);


/* loop through the $not_int_types to see working of 
   intval() on non integer types, expected output: integer value in decimal notation for valid integers */
foreach ($not_int_types as $type ) {
   
var_dumpintval($type) );
}

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

//arguments more than expected 
var_dumpintval(TRUEFALSETRUE) );
 
echo 
"\n--- Done ---\n";


?>
--EXPECTF--
*** Testing intval() with valid integer values ***

***Output with default base value ie 10 ***
int(0)
int(1)
int(-1)
int(-2147483648)
int(-2147483647)
int(2147483647)
int(2147483640)
int(4667)
int(0)
int(0)
int(0)
int(-2147483648)
int(0)
int(2147483647)
int(123)
int(1)
int(-2147483648)
int(2147483647)

***Output with base value of 10( explicitly passed as argument) ***
int(0)
int(1)
int(-1)
int(-2147483648)
int(-2147483647)
int(2147483647)
int(2147483640)
int(4667)
int(0)
int(0)
int(0)
int(-2147483648)
int(0)
int(2147483647)
int(123)
int(1)
int(-2147483648)
int(2147483647)

***Output with base value  of 16 ***
int(0)
int(1)
int(-1)
int(-2147483648)
int(-2147483648)
int(2147483647)
int(2147483640)
int(4667)
int(4779)
int(4095)
int(250)
int(-2147483648)
int(2147483647)
int(2147483647)
int(291)
int(1)
int(-2147483648)
int(2147483647)

***Output with base value of 8 ***
int(0)
int(1)
int(-1)
int(-9020)
int(-9020)
int(2147483647)
int(2147483640)
int(4667)
int(0)
int(0)
int(0)
int(-2147483648)
int(0)
int(2147483647)
int(83)
int(1)
int(-2147483648)
int(2147483647)

*** Testing intval() on non integer types ***
int(-2147483648)
int(2147483647)
int(0)
int(0)
int(2147483647)
int(-2147483648)
int(0)
int(0)
int(1)
int(100000)
int(-1000000)
int(100000000)
int(-1000000000)
int(10)
int(1050000)
int(%d)
int(%d)
int(0)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
int(0)
int(0)
int(0)
int(0)
int(1)
int(1)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(0)
int(1)
int(0)
int(1)
int(0)
int(0)
int(0)

*** Testing error conditions ***

Warning: Wrong parameter count for intval() in %s on line %d
NULL

Warning: Wrong parameter count for intval() in %s on line %d
NULL

--- Done ---