Exemplo n.º 1
0
 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.");
     });
 }
Exemplo n.º 2
0
 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");
     });
 }
Exemplo n.º 3
0
 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);
     });
 }
Exemplo n.º 4
0
 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));
     });
 }
Exemplo n.º 5
0
 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));
 }
Exemplo n.º 6
0
 public function testGeneratedDataCollectionOnMoreComplexDataStructures()
 {
     $this->forAll(Generator\vector(2, Generator\int()), Generator\char())->hook(Listener\collectFrequencies())->then(function ($vector) {
         $this->assertEquals(2, count($vector));
     });
 }
Exemplo n.º 7
0
 /**
  * @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++;
     });
 }