public function test_adding_with_okay_types_adds_to_dictionary()
{
//string key and val
$d = new Dictionary('string', 'string');
$d = $d->add('testkey', 'testval');
$this->assertEquals(1, $d->count());
//int key and val
$d = new Dictionary('int', 'int');
$d = $d->add(1, 42);
$this->assertEquals(1, $d->count());
//integer synonymous with int
$d = new Dictionary('integer', 'integer');
$d = $d->add(1, 42);
$this->assertEquals(1, $d->count());
//float works as val
$d = new Dictionary('string', 'float');
$d = $d->add("a", 2.0);
$this->assertEquals(1, $d->count());
//double synonymous with float
$d = new Dictionary('string', 'double');
$d = $d->add('b', 2.0);
$this->assertEquals(1, $d->count());
//bool valid value
$d = new Dictionary('int', 'bool');
$d = $d->add(1, false);
$this->assertEquals(1, $d->count());
//boolean synonymous with bool
$d = new Dictionary('int', 'boolean');
$d = $d->add(1, false);
$this->assertEquals(1, $d->count());
//callable works as value type
$d = new Dictionary('string', 'callable');
$d = $d->add('test', function () {
});
$this->assertEquals(1, $d->count());
//class works as value type
$d = new Dictionary('string', TestClassA::class);
$d = $d->add('test', new TestClassA(42));
$this->assertEquals(1, $d->count());
//dervied classes, too work.
$d = $d->add('test2', new TestClassExtendsA(42));
$this->assertEquals(2, $d->count());
//interface works as value type
$d = new Dictionary('string', TestClassAInterface::class);
$d = $d->add('test', new TestClassA(42));
$this->assertEquals(1, $d->count());
}