/**
  * convert the timeout into something we can use
  *
  * @param  mixed $timeout
  *         the timeout value to convert
  * @return array
  *         0 - the overall timeout
  *         1 - tv_sec param to select()
  *         2 - tv_usec param to select()
  */
 private static function getTimeoutToUse($timeout = null)
 {
     // special case
     if ($timeout === null) {
         return [0, 1, 0];
     }
     // general case
     $tAsF = BuildTimeoutAsFloat::from($timeout);
     if ($tAsF >= 1.0) {
         return [$tAsF, 1, 0];
     }
     return [max($tAsF, 0.2), 0, max(intval($tAsF * 1000000), 200000)];
 }
 /**
  * @covers ::__invoke
  * @covers ::from
  * @covers ::fromNumeric
  * @dataProvider provideOverrideTimeoutsToTest
  */
 public function testCanOverrideDefaultTimeout($defaultTimeout, $overrideTimeout, $expectedResult)
 {
     // ----------------------------------------------------------------
     // setup your test
     $obj = new BuildTimeoutAsFloat();
     // ----------------------------------------------------------------
     // perform the change
     $actualResult1 = $obj($defaultTimeout, $overrideTimeout);
     $actualResult2 = BuildTimeoutAsFloat::from($defaultTimeout, $overrideTimeout);
     // ----------------------------------------------------------------
     // test the results
     $this->assertEquals($expectedResult, $actualResult1);
     $this->assertEquals($expectedResult, $actualResult2);
 }