function testMicrotime() { $now = "2028-08-29 17:28:49"; $unix = \strtotime($now); TimeMachine::setNow($now, 200); $this->assertEquals($unix + 0.2, round(microtime(true), 3)); usleep(200 * 1000 + 200); $this->assertEquals($unix + 0.4, round(microtime(true), 2)); TimeMachine::freeze(); $now = microtime(true); usleep(200 * 1000); $this->assertEquals($now, microtime(true)); $realNow = \microtime(); $realNowParts = explode(" ", $realNow); TimeMachine::setNow(doubleval(doubleval($realNowParts[1]) + doubleval($realNowParts[0]))); $now = microtime(); $nowParts = explode(" ", $now); $this->assertEquals($realNowParts[1], $nowParts[1]); //we have to round the first part because double is not precise enough :-( $this->assertEquals(round($realNowParts[0], 4), round($nowParts[0], 4)); TimeMachine::unfreeze(); }