| 
<?php
 require_once( '../../../Data/Types/Stack.php' );
 
 use Falcraft\Data\Types;
 
 echo "Falcraft\\Data\\Types\\Stack.php Test\n";
 echo "----------------------------------\n\n";
 
 echo "Instantiation -> ";
 
 $success = true;
 
 $testStack = null;
 
 try {
 $testStack = new Types\Stack();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Push ('test1', 'test2', 'test3') -> ";
 
 $success = true;
 
 $list = null;
 
 try {
 $testStack->push('test1', 'test2', 'test3');
 $list = $testStack->getStack();
 if (!in_array('test2', $list)) {
 $success = false;
 }
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Pop -> ";
 
 $success = true;
 $val = null;
 
 try {
 $val = $testStack->pop();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! ($val)\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "testStack[] Functionality -> ";
 
 $success = true;
 
 $list = null;
 
 try {
 $testStack[] = 'autoData';
 $list = $testStack->getStack();
 if (!in_array('autoData', $list)) {
 $success = false;
 }
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Replace Data [] -> \n";
 
 try {
 $testStack[1] = 'replaceData';
 } catch (\Exception $e) {
 
 }
 
 var_dump($testStack->getStack());
 
 echo "\nRoll -- ";
 try {
 $testStack->push('roll1', 'roll2', 'roll3');
 echo "    Pre-Roll: \n";
 var_dump($testStack->getStack());
 echo "\n    roll(2): \n";
 $testStack->roll(2);
 var_dump($testStack->getStack());
 echo "\n    roll(-1): \n";
 $testStack->roll(-1);
 var_dump($testStack->getStack());
 echo "\n    roll(3): \n";
 $testStack->roll(3);
 var_dump($testStack->getStack());
 } catch (\Exception $e) {
 echo "Failure\n\n";
 }
 
 echo "Top -> ";
 
 $success = true;
 $val = null;
 
 try {
 $val = $testStack->top();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 class testObject {
 public $publicProp;
 
 }
 
 $obj = new testObject();
 $obj->publicProp = 3;
 
 echo "Push Reference -> ";
 
 $success = true;
 
 try {
 $testStack->pushReference($obj);
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Test Reference: ";
 
 $success = true;
 
 try {
 $obj->publicProp = 5;
 echo "\n"; var_dump($testStack->getStack()); echo "\n";
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "TopReference -> ";
 
 $success = true;
 
 $val = null;
 
 try {
 $obj->publicProp = 7;
 $val = $testStack->topReference();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! ({$val->publicProp})\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "PopReference -> ";
 
 $success = true;
 
 $val = null;
 
 try {
 $obj->publicProp = 11;
 $val = $testStack->popReference();
 } catch(\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! ({$val->publicProp})\n";
 } else {
 echo "Failure...\n";
 }
 |