--TEST--
Test unset(), empty() and isset() functions
--FILE--
<?php
echo "*** Testing unset(), empty() & isset() with scalar variables ***\n";
$scalar_variables = array(
0,
1,
+1
-1,
0x55,
-0xFA,
0123,
-0563,
0.0,
1e5,
1E-5,
-1.5e5,
+5.6,
"",
'',
" ",
' ',
"string",
"123",
"0",
"ture",
"FALSE",
"NULL",
"null",
true,
false,
TRUE,
FALSE
);
$loop_counter = 1;
foreach ($scalar_variables as $scalar_var) {
$set_var = 10; echo "-- Iteration $loop_counter --\n"; $loop_counter++;
var_dump( isset($scalar_var) );
var_dump( isset($scalar_var, $set_var) );
var_dump( empty($scalar_var) );
unset( $scalar_var );
var_dump( $scalar_var );
var_dump( isset($scalar_var) );
var_dump( isset($scalar_var, $set_var) );
var_dump( empty($scalar_var) );
var_dump( isset($scalar_var, $set_var) );
unset($set_var);
var_dump( isset($scalar_var, $set_var) );
}
echo "\n*** Testing unset(), empty() & isset() with arrays ***\n";
$array_variables = array(
array(),
array(NULL),
array(0),
array("0"),
array(""),
array(1,2,3,4),
array(1.4,2.5,5.6),
array(1 => "One", 2 => "two"),
array("Name" => "Jack", "Age" => "30"),
array(1,2, "One" => "1", 2 => "two", ""=>"empty", "" => '')
);
$outer_loop_counter = 1;
foreach ($array_variables as $array_var) {
echo "--- Outerloop Iteration $outer_loop_counter ---\n";
$var = 1; unset($array_var['non_existent']);
var_dump( isset($array_var['non_existent']) );
var_dump( isset($array_var['non_existent'], $var) );
var_dump( isset($array_var['non_existent'], $array_var['none']) );
var_dump( empty($array_var['non_existent']) );
var_dump( empty($array_var) ); var_dump( isset($array_var) );
$keys = array_keys($array_var);
$inner_loop_counter = 1;
foreach ($keys as $key_value) {
echo "-- Innerloop Iteration $inner_loop_counter of Outerloop Iteration $outer_loop_counter --\n";
$inner_loop_counter++;
unset($array_var[$key_value]);
var_dump($array_var);
var_dump( isset($array_var[$key_val]) ); var_dump( isset($array_var[$key_val], $array_var) );
var_dump( empty($array_var[$key_val]) );
var_dump($array_var);
}
$outer_loop_counter++;
unset($array_var);
var_dump($array_var);
var_dump( isset($array_var) ); var_dump( isset($array_var, $array_var[$key_val]) );
var_dump( empty($array_var) ); }
echo "\n*** Testing unset(), emtpy() & isset() with resource variables ***\n";
$fp = fopen(__FILE__, "r");
$dfp = opendir( dirname(__FILE__) );
$resources = array (
$fp,
$dfp
);
$loop_counter = 1;
foreach ($resources as $resource) {
$temp_var = 10;
echo "-- Iteration $loop_counter --\n"; $loop_counter++;
var_dump($resource);
var_dump( isset($resource) ); var_dump( empty($resource) ); var_dump( isset($resource, $temp_var) );
var_dump($resource);
unset($resource);
var_dump( isset($resource) ); var_dump( empty($resource) ); var_dump( isset($resource, $temp_var) ); unset($temp_var);
var_dump( isset($resource, $temp_var) );
var_dump($resource);
}
unset($resources);
var_dump($resources);
var_dump( isset($resources) ); var_dump( empty($resources) );
echo "\n*** Testing unset(), empty() & isset() with objects ***\n";
class Point
{
var $x;
var $y;
var $lable;
function Point($x, $y) {
$this->x = $x;
$this->y = $y;
}
function setLable($lable) {
$this->lable = $lable;
}
function testPoint() {
echo "\nPoint::testPoint() called\n";
}
}
$point1 = new Point(30,40);
var_dump($point1);
var_dump( isset($point1) ); var_dump( empty($point1) ); var_dump( isset($point1->$lable) ); var_dump( empty($point1->$lable) );
$point1->setLable("Point1");
var_dump( isset($point1->$lable) ); var_dump( empty($point1->$lable) );
var_dump($point1);
unset($point1->x);
var_dump($point1);
var_dump( isset($point1->x) ); var_dump( empty($point1->x) );
unset($point1->y);
unset($point1->lable);
var_dump($point1);
var_dump( isset($point1) ); var_dump( empty($point1) );
unset($point1);
var_dump( isset($point1) ); var_dump( empty($point1) ); var_dump($point1);
$point2 = new Point(5,6);
var_dump( isset($point2->testPoint) );
var_dump( empty($point2->testPoint) );
unset($point2->testPoint);
var_dump( isset($point2->testPoint) );
var_dump( empty($point2->testPoint) );
var_dump( get_class_methods($point2) );
var_dump($point2);
echo "\n*** Testing possible variation in operation for isset(), empty() & unset() ***\n";
echo "\n** Testing unset() variation 1: unset on static variable inside a function **\n";
function test_unset1() {
static $static_var;
$static_var ++;
echo "value of static_var before unset: $static_var\n";
var_dump( isset($static_var) );
var_dump( empty($static_var) );
unset($static_var);
echo "value of static_var after unset: $static_var\n";
var_dump( isset($static_var) );
var_dump( empty($static_var) );
$static_var = 20;
echo "value of static_var after new assignment: $static_var\n";
}
test_unset1();
test_unset1();
test_unset1();
echo "\n** Testing unset() variation 2: unset on a variable passed by ref. inside of a function **\n";
function test_unset2( &$ref_val ) {
unset($ref_val);
var_dump( isset($ref_val) );
var_dump( empty($ref_val) );
$ref_val = "new value by ref";
}
$value = "value";
var_dump($value);
test_unset2($value);
var_dump($value);
echo "\n** Testing unset() variation 3: unset on a global variable inside of a function **\n";
$global_var = 10;
function test_unset3() {
global $global_var;
var_dump( isset($global_var) );
var_dump( empty($global_var) );
unset($global_var);
var_dump( isset($global_var) );
var_dump( empty($global_var) );
}
var_dump($global_var);
test_unset3();
var_dump($global_var);
?>
===DONE===
--EXPECTF--
*** Testing unset(), empty() & isset() with scalar variables ***
-- Iteration 1 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 2 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 3 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 4 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 5 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 6 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 7 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 8 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 9 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 10 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 11 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 12 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 13 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 14 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 15 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 16 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 17 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 18 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 19 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 20 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 21 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 22 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 23 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 24 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 25 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 26 --
bool(true)
bool(true)
bool(false)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
-- Iteration 27 --
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: scalar_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
*** Testing unset(), empty() & isset() with arrays ***
--- Outerloop Iteration 1 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 2 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 2 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 3 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 3 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 4 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 4 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 5 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 5 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 6 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 6 --
array(3) {
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(3) {
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
}
-- Innerloop Iteration 2 of Outerloop Iteration 6 --
array(2) {
[2]=>
int(3)
[3]=>
int(4)
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(2) {
[2]=>
int(3)
[3]=>
int(4)
}
-- Innerloop Iteration 3 of Outerloop Iteration 6 --
array(1) {
[3]=>
int(4)
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(1) {
[3]=>
int(4)
}
-- Innerloop Iteration 4 of Outerloop Iteration 6 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 7 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 7 --
array(2) {
[1]=>
float(2.5)
[2]=>
float(5.6)
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(2) {
[1]=>
float(2.5)
[2]=>
float(5.6)
}
-- Innerloop Iteration 2 of Outerloop Iteration 7 --
array(1) {
[2]=>
float(5.6)
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(1) {
[2]=>
float(5.6)
}
-- Innerloop Iteration 3 of Outerloop Iteration 7 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 8 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 8 --
array(1) {
[2]=>
string(3) "two"
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(1) {
[2]=>
string(3) "two"
}
-- Innerloop Iteration 2 of Outerloop Iteration 8 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 9 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 9 --
array(1) {
["Age"]=>
string(2) "30"
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(1) {
["Age"]=>
string(2) "30"
}
-- Innerloop Iteration 2 of Outerloop Iteration 9 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
--- Outerloop Iteration 10 ---
bool(false)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
-- Innerloop Iteration 1 of Outerloop Iteration 10 --
array(4) {
[1]=>
int(2)
["One"]=>
string(1) "1"
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(4) {
[1]=>
int(2)
["One"]=>
string(1) "1"
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
-- Innerloop Iteration 2 of Outerloop Iteration 10 --
array(3) {
["One"]=>
string(1) "1"
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(3) {
["One"]=>
string(1) "1"
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
-- Innerloop Iteration 3 of Outerloop Iteration 10 --
array(2) {
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(2) {
[2]=>
string(3) "two"
[""]=>
string(0) ""
}
-- Innerloop Iteration 4 of Outerloop Iteration 10 --
array(1) {
[""]=>
string(0) ""
}
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(1) {
[""]=>
string(0) ""
}
-- Innerloop Iteration 5 of Outerloop Iteration 10 --
array(0) {
}
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(false)
Notice: Undefined variable: key_val in %s on line %d
bool(true)
array(0) {
}
Notice: Undefined variable: array_var in %s on line %d
NULL
bool(false)
bool(false)
bool(true)
*** Testing unset(), emtpy() & isset() with resource variables ***
-- Iteration 1 --
resource(%d) of type (stream)
bool(true)
bool(false)
bool(true)
resource(%d) of type (stream)
bool(false)
bool(true)
bool(false)
bool(false)
Notice: Undefined variable: resource in %s on line %d
NULL
-- Iteration 2 --
resource(%d) of type (stream)
bool(true)
bool(false)
bool(true)
resource(%d) of type (stream)
bool(false)
bool(true)
bool(false)
bool(false)
Notice: Undefined variable: resource in %s on line %d
NULL
Notice: Undefined variable: resources in %s on line %d
NULL
bool(false)
bool(true)
*** Testing unset(), empty() & isset() with objects ***
object(Point)#%d (3) {
["x"]=>
int(30)
["y"]=>
int(40)
["lable"]=>
NULL
}
bool(true)
bool(false)
Notice: Undefined variable: lable in %s on line %d
bool(false)
Notice: Undefined variable: lable in %s on line %d
bool(true)
Notice: Undefined variable: lable in %s on line %d
bool(false)
Notice: Undefined variable: lable in %s on line %d
bool(true)
object(Point)#%d (3) {
["x"]=>
int(30)
["y"]=>
int(40)
["lable"]=>
string(6) "Point1"
}
object(Point)#%d (2) {
["y"]=>
int(40)
["lable"]=>
string(6) "Point1"
}
bool(false)
bool(true)
object(Point)#%d (0) {
}
bool(true)
bool(false)
bool(false)
bool(true)
Notice: Undefined variable: point1 in %s on line %d
NULL
bool(false)
bool(true)
bool(false)
bool(true)
array(3) {
[0]=>
string(5) "Point"
[1]=>
string(8) "setLable"
[2]=>
string(9) "testPoint"
}
object(Point)#%d (3) {
["x"]=>
int(5)
["y"]=>
int(6)
["lable"]=>
NULL
}
*** Testing possible variation in operation for isset(), empty() & unset() ***
** Testing unset() variation 1: unset on static variable inside a function **
value of static_var before unset: 1
bool(true)
bool(false)
Notice: Undefined variable: static_var in %s on line %d
value of static_var after unset:
bool(false)
bool(true)
value of static_var after new assignment: 20
value of static_var before unset: 2
bool(true)
bool(false)
Notice: Undefined variable: static_var in %s on line %d
value of static_var after unset:
bool(false)
bool(true)
value of static_var after new assignment: 20
value of static_var before unset: 3
bool(true)
bool(false)
Notice: Undefined variable: static_var in %s on line %d
value of static_var after unset:
bool(false)
bool(true)
value of static_var after new assignment: 20
** Testing unset() variation 2: unset on a variable passed by ref. inside of a function **
string(5) "value"
bool(false)
bool(true)
string(5) "value"
** Testing unset() variation 3: unset on a global variable inside of a function **
int(10)
bool(true)
bool(false)
bool(false)
bool(true)
int(10)
===DONE===