public function testConcatenationMaintainsLength() { $this->forAll(Generator\vector(10, Generator\nat(1000)), Generator\vector(10, Generator\nat(1000)))->then(function ($first, $second) { $concatenated = array_merge($first, $second); $this->assertEquals(count($concatenated), count($first) + count($second), var_export($first, true) . " and " . var_export($second, true) . " do not maintain their length when concatenated."); }); }
public function testShrinkingMappedValuesInsideOtherGenerators() { $this->forAll(Generator\vector(3, Generator\map(function ($n) { return $n * 2; }, Generator\nat())))->then(function ($tripleOfEvenNumbers) { $this->assertLessThanOrEqual(100, array_sum($tripleOfEvenNumbers), "The triple sum " . var_export($tripleOfEvenNumbers, true) . " is not less than 100"); }); }
public function testCreatingABrandNewGeneratorFromAGeneratedValue() { $this->forAll(Generator\bind(Generator\vector(4, Generator\nat()), function ($vector) { return Generator\tuple(Generator\elements($vector), Generator\constant($vector)); }))->then(function ($tuple) { list($element, $vector) = $tuple; $this->assertContains($element, $vector); }); }
public function testVectorOfElementsGenerators() { $this->forAll(Generator\vector(4, Generator\elements([2, 4, 6, 8, 10, 12])))->then(function ($vector) { $sum = array_sum($vector); $isEven = function ($number) { return $number % 2 == 0; }; $this->assertTrue($isEven($sum), "{$sum} is not even, but it's the sum of the vector " . var_export($vector, true)); }); }
public function testSuchThatAcceptsPHPUnitConstraints() { $this->forAll(Generator\vector(5, Generator\suchThat($this->isType('integer'), Generator\oneOf(Generator\choose(0, 1000), Generator\string()))))->then($this->allNumbersAreBiggerThan(42)); }
public function testGeneratedDataCollectionOnMoreComplexDataStructures() { $this->forAll(Generator\vector(2, Generator\int()), Generator\char())->hook(Listener\collectFrequencies())->then(function ($vector) { $this->assertEquals(2, count($vector)); }); }
/** * @group long */ public function testPropertyBased() { $this->iteration = 0; $this->forAll(Generator\vector(2, Generator\seq(Generator\elements(['acquire', 'release']))))->when(function ($sequencesOfSteps) { foreach ($sequencesOfSteps as $sequence) { if (!$sequence) { return false; } } return true; })->then(function ($sequencesOfSteps) { $this->lockCollection->drop(); $log = "/tmp/mongolock_{$this->iteration}.log"; if (file_exists($log)) { unlink($log); } $processes = []; foreach ($sequencesOfSteps as $i => $sequence) { $processName = "p{$i}"; $steps = implode(',', $sequence); $process = new Process("exec php " . __DIR__ . "/mongolock.php {$processName} {$steps} >> {$log}"); $process->start(); $processes[] = $process; } foreach ($processes as $process) { $process->wait(); $this->assertExitedCorrectly($process, "Error in MongoLock run"); } $process = new Process("exec java -jar " . __DIR__ . "/knossos-onebip.jar mongo-lock {$log}"); $process->run(); $this->assertExitedCorrectly($process, "Non-linearizable history in {$log}"); $this->iteration++; }); }