X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=gen-matrix.php;h=1901afbb0131c28b8e51ae3bdf589c0535967c0d;hb=9214803fbc41fe0d43bc0ef4778927c378456c8f;hp=e7ded6795d4c4d35e9ac09050c2980a9d21e333f;hpb=165f61f020ee6de84051c4a463e7f8b7d1f87958;p=m6w6%2Fpecl-ci diff --git a/gen-matrix.php b/gen-matrix.php index e7ded67..1901afb 100644 --- a/gen-matrix.php +++ b/gen-matrix.php @@ -1,52 +1,145 @@ $array) { + $jobs = []; + foreach ($array as $key => $values) { + if (is_numeric($key) && is_string($values)) { + // duplicate each job and switch on yes/no + if (!$jobs) { + $jobs[$idx($id)][$values] = "yes"; + $jobs[$idx($id)][$values] = "no"; + } else { + foreach (array_keys($jobs) as $job_id) { + $jobs[$job_id][$values] = "yes"; + $job_idx = $idx($job_id); + $jobs[$job_idx] = $jobs[$job_id]; + $jobs[$job_idx][$values] = "no"; + } + } + } else if (is_numeric($key) && is_array($values)) { + // multiplicate each job for each mutually enabled combination of options + $all_mut = []; + foreach ($values as $yes) { + $mut = [$yes => "yes"]; + foreach ($values as $no) { + if ($yes !== $no) { + $mut[$no] = "no"; + } + } + $all_mut[] = $mut; + } + + if (!$jobs) { + foreach ($all_mut as $mut) { + $jobs[$idx($id)] = $mut; + } + } else { + foreach (array_keys($jobs) as $job_id) { + foreach ($all_mut as $i => $mut) { + $mut_job = array_merge($jobs[$job_id], $mut); + if ($i == 0) { + $jobs[$job_id] = $mut_job; + } else { + $jobs[$idx($job_id)] = $mut_job; + } + } + } + } + } else { + // multiplicate all jobs for each value + if (!$jobs) { + foreach ((array) $values as $val) { + $jobs[$idx($id)][$key] = $val; + } + } else { + foreach (array_keys($jobs) as $job_id) { + foreach ((array) $values as $i => $val) { + if ($i == 0) { + $jobs[$job_id][$key] = $val; + } else { + $job_idx = $idx($job_id); + $jobs[$job_idx] = $jobs[$job_id]; + $jobs[$job_idx][$key] = $val; + } + } + } + } + } + } + $all_jobs[] = $jobs; + } + return array_merge(...$all_jobs); + } + function travis(array $matrix) { + $xpc = []; + foreach ($matrix as $id => $array) { + $apc = []; + foreach ($array as $key => $values) { + if (is_numeric($key) && is_string($values)) { + // switch on yes/no + $key = $values; + $values = ["no", "yes"]; + } else if (is_numeric($key) && is_array($values)) { + // mutually enabled options + $vpc = []; + foreach ($values as $yes) { + $mpc = "$yes=yes "; + foreach ($values as $no) { + if ($yes === $no) { + continue; + } + $mpc .= "$no=no "; + } + $vpc[] = $mpc; + } + $key = null; + $values = $vpc; + } - return $apc; - }; - - foreach (func_get_args() as $array) { - $apc = []; - foreach ($array as $key => $values) { - if (is_numeric($key) && is_string($values)) { - // switch on yes/no - $key = $values; - $values = ["no", "yes"]; - } else if (is_numeric($key) && is_array($values)) { - // mutually enasbled options - $vpc = []; - foreach ($values as $yes) { - $mpc = "$yes=yes "; - foreach ($values as $no) { - if ($yes === $no) { - continue; - } - $mpc .= "$no=no "; - } - $vpc[] = $mpc; - } - $key = null; - $values = $vpc; - } - - if (empty($apc)) { - // seed - foreach ((array) $values as $val) { - $apc[] = strlen($key) ? "$key=$val" : $val; - } - } else { - // combine - $cpc = $apc; - $apc = []; - foreach ((array) $values as $val) { - foreach ($cpc as $e) { - $apc[] = strlen($key) ? "$e $key=$val" : "$e $val"; - } - } - } - } - $xpc[] = $apc; - } - return $xpc; + if (empty($apc)) { + // seed + foreach ((array) $values as $val) { + $apc[] = strlen($key) ? "$key=$val" : $val; + } + } else { + // combine + $cpc = $apc; + $apc = []; + foreach ((array) $values as $val) { + foreach ($cpc as $e) { + $apc[] = strlen($key) ? "$e $key=$val" : "$e $val"; + } + } + } + } + $xpc[$id] = $apc; + } + return $xpc; + } + function __invoke(...$args) { + return $this->travis(...$args); // BC + } };