/** * 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)]; }
/** * 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)]; }
/** * 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; }
/** * 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; }
function pet($duck) { expects(withMethod('quack'), $duck); }
function calculateAge($yearOfBirth) { expects(validYear, $yearOfBirth); return (int) date('Y') - $yearOfBirth; }
/** * @param array|\Traversable $var * @return array */ function traversableToArray($var) { args\expects(args\traversable, $var); return $var instanceof \Iterator ? iterator_to_array($var) : (array) $var; }
function deprecatedExpectsNegativeTest($arg1) { expects($arg1, 'a positive integer', function ($arg) { return is_int($arg) && $arg > 0; }); }
/** * 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); }; }
/** * @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; }