public function testThrottle() { // from js $counter = 0; $incr = function () use(&$counter) { $counter++; }; $throttledIncr = __::throttle($incr, 100); $throttledIncr(); $throttledIncr(); $throttledIncr(); usleep(120 * 1000); $throttledIncr(); usleep(140 * 1000); $throttledIncr(); usleep(220 * 1000); $throttledIncr(); usleep(240 * 1000); $throttledIncr(); $this->assertEquals(5, $counter, 'incr was throttled'); usleep(500 * 1000); $counter = 0; $incr = function () use(&$counter) { $counter++; }; $throttledIncr = __::throttle($incr, 100); $throttledIncr(); usleep(220 * 1000); $this->assertEquals(1, $counter, 'incr called once'); usleep(500 * 1000); $counter = 0; $incr = function () use(&$counter) { $counter++; }; $throttledIncr = __::throttle($incr, 100); $throttledIncr(); $throttledIncr(); usleep(220 * 1000); $this->assertEquals(1, $counter, 'incr called twice'); }