| 
<?php
 require_once('../../../Data/Types/Restrictions.php');
 require_once('../../../Data/Types/TaggedUnion.php');
 require_once('../../../Data/Types/Range.php');
 require_once('../../../Data/Types/Stack.php');
 require_once('../../../Data/Types/Type.php');
 
 use Falcraft\Data\Types;
 use Falcraft\Data\Types\Type;
 
 echo "Falcraft\\Data\\Types\\TaggedUnion.php Test\n";
 echo "----------------------------------------\n\n";
 
 echo "Basic Instantiation (Boolean, String) -> ";
 
 $success = true;
 
 $testRestrictions = $testTaggedUnion = null;
 
 try {
 $testRestrictions = new Types\Restrictions(
 array(Type::BASIC_BOOL, Type::BASIC_STRING,)
 );
 
 $testTaggedUnion = new Types\TaggedUnion($testRestrictions);
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Setting Tagged Union Values -> \n";
 echo "    Set Boolean -> ";
 
 try {
 $testTaggedUnion->set(true);
 if ($testTaggedUnion->get() === true) {
 echo "Yes\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 echo "    Set String -> ";
 
 try {
 $testTaggedUnion->set('string');
 if ($testTaggedUnion->get() === 'string') {
 echo "Yes\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 echo "    Set Integer -> ";
 
 try {
 $testTaggedUnion->set(5);
 echo "Yes\n";
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 echo "Typed Object Instantiation -> ";
 
 $success = true;
 
 $testRestrictions = $testTaggedUnion = null;
 
 try {
 $testRestrictions = new Types\Restrictions(
 array(Type::BASIC_INT, Type::TYPED_OBJECT,),
 array('Falcraft\\Data\\Types\\Range')
 );
 
 $testTaggedUnion = new Types\TaggedUnion($testRestrictions);
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Setting Tagged Union Values -> \n";
 echo "    Integer -> ";
 
 try {
 $testTaggedUnion->set(5);
 if ($testTaggedUnion->get() == 5) {
 echo "Yes - Type: \n\n";
 var_dump($testTaggedUnion->getType());
 echo "\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 echo "    Falcraft\\Data\\Types\\Range -> ";
 
 try {
 $testRange = new Types\Range();
 $testTaggedUnion->set($testRange);
 if ($testTaggedUnion->get() instanceof Types\Range) {
 echo "Yes - Type: \n\n";
 var_dump($testTaggedUnion->getType());
 echo "\n";
 } else {
 echo "No\n";
 }
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 echo "    Falcraft\\Data\\Types\\Stack -> ";
 
 try {
 $testStack = new Types\Stack();
 $testTaggedUnion->set($testStack);
 echo "Yes\n";
 } catch (\Exception $e) {
 echo "No\n";
 }
 
 |