Пример #1
0
/**
 * Returns a random element from a non-empty sequence
 *
 * @param array|\Traversable $sequence
 * @return mixed
 */
function choice($sequence)
{
    if (!$sequence) {
        throw new \InvalidArgumentException('Sequence is empty');
    }
    args\expects(args\traversable, $sequence);
    $sequence = ds\traversableToArray($sequence);
    return $sequence[array_rand($sequence)];
}
Пример #2
0
Файл: rnd.php Проект: ihor/Nspl
/**
 * Returns a random item from a non-empty sequence
 *
 * @param array|\Traversable $sequence
 * @return mixed
 */
function choice($sequence)
{
    if (!$sequence) {
        throw new \InvalidArgumentException('Sequence is empty');
    }
    args\expects(args\traversable, $sequence);
    if ($sequence instanceof \Iterator) {
        $sequence = iterator_to_array($sequence);
    }
    return $sequence[array_rand($sequence)];
}
Пример #3
0
/**
 * Returns two lists, one containing values for which your predicate returned true until the predicate returned
 * false, and the other containing all the elements that left
 *
 * @param callable $predicate
 * @param array|\Traversable $sequence
 * @return array
 */
function span(callable $predicate, $sequence)
{
    args\expects(args\traversable, $sequence);
    $isList = ds\isList($sequence);
    $result = [[], []];
    $listIndex = 0;
    foreach ($sequence as $k => $v) {
        if (!$predicate($v)) {
            $listIndex = 1;
        }
        if ($isList) {
            $result[$listIndex][] = $v;
        } else {
            $result[$listIndex][$k] = $v;
        }
    }
    return $result;
}
Пример #4
0
/**
 * Moves list element to another position
 *
 * @param array $list
 * @param int $from
 * @param int $to
 * @return array
 */
function moveElement(array $list, $from, $to)
{
    args\expects(args\int, $from);
    args\expects(args\int, $to, 3);
    if (!ds\isList($list)) {
        throw new \InvalidArgumentException('First argument should be a list');
    }
    if (!isset($list[$from]) || !isset($list[$to])) {
        throw new \InvalidArgumentException('From and to should be valid list keys');
    }
    if ($from === $to) {
        return $list;
    }
    $moving = array_splice($list, $from, 1);
    array_splice($list, $to, 0, $moving);
    return $list;
}
Пример #5
0
function pet($duck)
{
    expects(withMethod('quack'), $duck);
}
Пример #6
0
Файл: args.php Проект: ihor/Nspl
function calculateAge($yearOfBirth)
{
    expects(validYear, $yearOfBirth);
    return (int) date('Y') - $yearOfBirth;
}
Пример #7
0
/**
 * @param array|\Traversable $var
 * @return array
 */
function traversableToArray($var)
{
    args\expects(args\traversable, $var);
    return $var instanceof \Iterator ? iterator_to_array($var) : (array) $var;
}
Пример #8
0
 function deprecatedExpectsNegativeTest($arg1)
 {
     expects($arg1, 'a positive integer', function ($arg) {
         return is_int($arg) && $arg > 0;
     });
 }
Пример #9
0
Файл: op.php Проект: ihor/Nspl
/**
 * Returns a function that returns method result for a given object on predefined arguments
 * @param string $method Object method
 * @param array $args
 * @return callable
 */
function methodCaller($method, array $args = array())
{
    args\expects(args\string, $method);
    return function ($object) use($method, $args) {
        return call_user_func_array(array($object, $method), $args);
    };
}
Пример #10
0
Файл: Set.php Проект: ihor/Nspl
 /**
  * @param Set|array|\Traversable $sequence
  * @return bool
  */
 public function isSubset($sequence)
 {
     if ($sequence instanceof Set) {
         return array_intersect_key($this->array, $sequence->array) === $this->array;
     }
     args\expects(args\traversable, $sequence);
     $size = count($this->array);
     $present = array();
     foreach ($sequence as $element) {
         $elementKey = static::getElementKey($element);
         if (isset($this->array[$elementKey]) || array_key_exists($element, $this->array)) {
             $present[$element] = true;
             if (count($present) === $size) {
                 return true;
             }
         }
     }
     return false;
 }