public function test_save()
{
//Save 100
$call = $this->mem->save(__METHOD__ . 's1', 100);
$this->assertTrue($call);
$this->assertEquals($this->mem->read(__METHOD__ . 's1'), 100);
//Save 100 with ttl 10
$this->assertTrue($this->mem->save(__METHOD__ . 's2', 100, 10));
$this->assertEquals($this->mem->read(__METHOD__ . 's2', $ttl_left), 100);
$this->assertEquals($ttl_left, 10);
//Save float key
$key = microtime(true) * 100;
$this->assertTrue($this->mem->save($key, 100, 12));
$check = $this->mem->read($key, $ttl_left);
$this->assertEquals($check, 100);
$this->assertEquals($ttl_left, 12);
//Save negative float key
$key = -10.12;
$this->assertTrue($this->mem->save($key, 100, 10));
$check = $this->mem->read($key, $ttl_left);
$this->assertEquals($check, 100);
$this->assertEquals($ttl_left, 10);
//Save with float ttl
$call = $this->mem->save(__METHOD__ . 's21', 100, 1.0E-6);
$this->assertTrue($call);
$check = $this->mem->read(__METHOD__ . 's21', $ttl_left);
$this->assertEquals($check, 100);
//Save with string ttl
$call = $this->mem->save(__METHOD__ . 's22', 100, 'stringttl');
$this->assertTrue($call);
$check = $this->mem->read(__METHOD__ . 's22', $ttl_left);
$this->assertEquals($check, 100);
//Save with tag
$call = $this->mem->save(__METHOD__ . 's3', 100, 10, 'tag');
$this->assertTrue($call);
$check = $this->mem->read(__METHOD__ . 's3', $ttl_left);
$this->assertEquals($check, 100);
$this->assertEquals($ttl_left, 10);
//Save with array of tags
$call = $this->mem->save(__METHOD__ . 's4', array('z' => 1), 10, array('tag', 'tag1'));
$this->assertTrue($call);
$check = $this->mem->read(__METHOD__ . 's4', $ttl_left);
$this->assertEquals($check, array('z' => 1));
$this->assertEquals($ttl_left, 10);
}