| 
<?php
 require_once('../../../Data/Types/Type.php');
 require_once('../../../Data/Types/Restrictions.php');
 require_once('../../../Data/Types/RestrictedSet.php');
 
 use Falcraft\Data\Types;
 use Falcraft\Data\Types\Type;
 
 echo "Falcraft\\Data\\Types\\RestrictedSet.php Test\n";
 echo "------------------------------------------\n\n";
 
 echo "Various Instantiations -> \n";
 echo "    \$testRestrictions = new Types\\Restrictions(array(Type::BASIC_INT)) -> ";
 
 $success = true;
 
 $testRestrictions = null;
 
 try {
 $testRestrictions = new Types\Restrictions(array(Type::BASIC_INT));
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "    \$testRestrictedSet = new Types\\RestrictedSet() -> ";
 
 $success = true;
 
 $testRestrictedSet = null;
 
 try {
 $testRestrictedSet = new Types\RestrictedSet();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "    \$testRestrictedSet = new Types\\RestrictedSet(array(1, 2, 'foo')) -> ";
 
 $success = true;
 
 $testRestrictedSet = null;
 
 try {
 $testRestrictedSet = new Types\RestrictedSet(array(1, 2, 'foo'));
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "    \$testRestrictedSet = new Types\\RestrictedSet(
 array(1, 2, 3,),
 new Types\\Restrictions(array(Type::BASIC_INT))) -> ";
 
 $success = true;
 
 $testRestrictedSet = null;
 
 try {
 $testRestrictedSet = new Types\RestrictedSet(
 array(1, 2, 3,),
 new Types\Restrictions(array(Type::BASIC_INT)));
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "    \$testRestrictedSet = new Types\\RestrictedSet(
 array(1, 2, 'foo'),
 \$testRestrictions) -> ";
 
 $fail = true;
 
 $testRestrictedSet = null;
 
 try {
 $testRestrictedSet = new Types\RestrictedSet(
 array(1, 2, 'foo'),
 $testRestrictions);
 $fail = false;
 } catch (\Exception $e) {
 
 }
 
 if ($fail) {
 echo "Failure!\n";
 } else {
 echo "Success...\n";
 }
 
 echo "    \$testRestrictedSet = new Types\\RestrictedSet(
 array(1, 2, 'foo'),
 \$testRestrictions,
 array('strict' => true)) -> ";
 
 $fail = true;
 
 $testRestrictedSet = null;
 
 try {
 $testRestrictedSet = new Types\RestrictedSet(
 array(1, 2, 'foo'),
 $testRestrictions,
 array('strict' => true));
 $fail = false;
 } catch (\Exception $e) {
 
 }
 
 if ($fail) {
 echo "Failure!\n";
 } else {
 echo "Success...\n";
 }
 
 $testRestrictedSet = new Types\RestrictedSet(
 array(1, 2, 3, 4,),
 $testRestrictions,
 array( 'strict' => true, 'unique' => true));
 
 echo "\nAdd Operation (3) -> ";
 
 $success = true;
 
 try {
 $testRestrictedSet->add(3);
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "\nSet Internals -- \n";
 var_dump($testRestrictedSet->getArray());
 
 echo "\nAdd Operation (2) -> ";
 
 $fail = true;
 
 try {
 $testRestrictedSet->add(2);
 $fail = false;
 } catch (\Exception $e) {
 
 }
 
 if ($fail) {
 echo "Failure!\n";
 } else {
 echo "Success...\n";
 }
 
 echo "\nSet Internals -- \n";
 var_dump($testRestrictedSet->getArray());
 
 echo "\nRemove Operation (2) -> ";
 
 $success = true;
 
 try {
 $testRestrictedSet->remove(2);
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "\nSet Internals -- \n";
 var_dump($testRestrictedSet->getArray());
 
 echo "\nIs 1 In Set? ";
 
 try {
 if ($testRestrictedSet->in(1)) {
 echo "Yes\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "EXCEPTION CAUGHT\n";
 }
 
 echo "Is Set Empty? ";
 
 try {
 if ($testRestrictedSet->isEmpty()) {
 echo "Yes\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "EXCEPTION CAUGHT\n";
 }
 
 echo "Size of Set -> ";
 
 $success = true;
 
 $count = null;
 
 try {
 $count = $testRestrictedSet->size();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! ($count)\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Iteration -- \n";
 
 try {
 foreach ($testRestrictedSet->iterate() as $setValue) {
 echo "    \$setValue - $setValue\n";
 }
 } catch (\Exception $e) {
 echo "EXCEPTION CAUGHT\n";
 }
 
 echo "Hashing -> ";
 
 $success = true;
 
 $hash = $hash2 = null;
 
 try {
 $hash = $testRestrictedSet->hash();
 $testRestrictedSet->add(7);
 $hash2 = $testRestrictedSet->hash();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! ($hash, $hash2)\n";
 } else {
 echo "Failure...";
 }
 
 class testClass {
 public $publicProp;
 }
 
 $obj = new testClass();
 
 $identity = null;
 
 $testRestrictedSetReference = new Types\RestrictedSet(
 array(),
 new Types\Restrictions(
 array(Type::TYPED_OBJECT), array('testClass')),
 array('strict' => true, 'unique' => true));
 
 echo "Add Reference -> \n";
 
 try {
 $obj->publicProp = 2;
 $identity = $testRestrictedSetReference->addReference($obj);
 $obj->publicProp = 3;
 
 echo "\nSet Internals --\n\n";
 var_dump($testRestrictedSetReference->getArray());
 echo "\n";
 } catch (\Exception $e) {
 echo "EXCEPTION CAUGHT\n";
 }
 
 echo "Retrieve Reference -> ";
 
 unset($obj);
 
 try {
 $obj = $testRestrictedSetReference->retrieveReference($identity);
 $obj->publicProp = 5;
 
 echo "\n\nSet Internals -- \n\n";
 var_dump($testRestrictedSetReference->getArray());
 echo "\n";
 } catch (\Exception $e) {
 echo "EXCEPTION CUAGHT\n";
 }
 
 echo "Remove By Identity -> ";
 
 try {
 $testRestrictedSetReference->removeByIdentifier($identity);
 
 echo "\n\nSet Internals -- \n\n";
 var_dump($testRestrictedSetReference->getArray());
 echo "\n";
 } catch (\Exception $e) {
 echo "EXCEPTION CAUGHT\n";
 }
 
 |