$Csv = new \projectivemotion\Csv\Csv();
$Csv->setString($data);
$CsvObjects = $Csv->AsObjects();
assert($CsvObjects[0]->ColumnOne === '1');
assert($CsvObjects[1]->ColumnOne === '4');
assert($CsvObjects[1]->{'Column Two'} === '5');
$ArrayObjects = $Csv->AsObjects('ArrayObject', ArrayObject::ARRAY_AS_PROPS);
//var_dump($ArrayObjects);
assert($ArrayObjects[1]->{'Column Two'} == '5');
assert($ArrayObjects[0]['Column Two'] == '2');
foreach ($Csv->generateObjects() as $obj) {
    assert(isset($obj->ColumnOne));
    assert(isset($obj->{'Column Two'}));
    assert(isset($obj->Header_Three));
}
$users = \projectivemotion\Csv\Csv::StringToObjects(<<<ND
Username,Password
amado,abc123
ND
);
assert($users[0]->Username == 'amado');
assert($users[0]->Password == 'abc123');
$categories = \projectivemotion\Csv\Csv::StringToObjects(<<<Cats
ID\tCategory
1\tLanguages
2\tPackages
3\tConcepts
Cats
, [], ["\n", "\t"]);
assert($categories[1]->Category == 'Packages');
echo "Passed all Tests.";
    print_r(func_get_args());
    exit(1);
});
class User
{
    protected $Password = '';
    protected $Username = '';
    public function __construct($data)
    {
        $this->Password = $data['Password'];
        $this->Username = $data['Username'];
    }
    public function CheckPassword($pass)
    {
        $check = password_verify($pass, $this->Password);
        if ($check) {
            echo "Password is {$pass}!\n";
        } else {
            echo "Incorrect password!\n";
        }
        return $check;
    }
}
/** @var User[] $users */
$users = \projectivemotion\Csv\Csv::StringToObjects(<<<'ND'
Username,Password
amado,$2y$10$EncFfzZYNSnswCKCNGmfTuICpGXaWthOd3BnZPYL.N8L0SH64VTF6
ND
, ['User']);
assert($users[0]->CheckPassword('safepassword') === false);
assert($users[0]->CheckPassword('abc123') === true);