/**
  * This test case is a port of Ian Clarke's unit tests for his Java Bloom 
  * filter implementation. (http://locut.us/SimpleBloomFilter/)
  */
 public function testBloomFilter()
 {
     srand(1234567);
     for ($i = 5; $i < 10; $i++) {
         $addCount = 10000 * ($i + 1);
         $bf = new BloomFilter(400000, BloomFilter::getHashCount(400000, $addCount));
         $added = array();
         for ($x = 0; $x < $addCount; $x++) {
             $num = rand();
             $added[$num] = 1;
         }
         foreach (array_keys($added) as $tmp) {
             $bf->add($tmp);
         }
         foreach (array_keys($added) as $tmp) {
             self::assertTrue($bf->contains($tmp), "Assert that there are no false negatives");
         }
         $falsePositives = 0;
         for ($x = 0; $x < $addCount; $x++) {
             $num = rand();
             // Ensure that this random number hasn't been added already
             if (isset($added[$num])) {
                 continue;
             }
             // If necessary, record a false positive
             if ($bf->contains($num)) {
                 $falsePositives++;
             }
         }
         $expectedFP = $bf->getFalsePositiveProbability();
         $actualFP = $falsePositives / $addCount;
         /*
                     echo "Got " . $falsePositives
                             . " false positives out of " . $addCount . " added items, rate = "
                             . $actualFP . ", expected = "
                             . $expectedFP . "\n";
         */
         $ratio = $expectedFP / $actualFP;
         $this->assertTrue($ratio > 0.9 && $ratio < 1.1, "Assert that the actual false positive rate doesn't deviate by more than 10% from what was predicted");
     }
 }
Beispiel #2
0
     * 
     * @param string Input for which the hash should be created 
     * @return int Numeric hash 
     */
    protected static function getHashCode($string)
    {
        return crc32($string);
    }
}
$items = array("first item", "second item", "third item");
/* Add all items with one call to add() and make sure contains() finds 
 * them all. 
 */
$filter = new BloomFilter(100, BloomFilter::getHashCount(100, 3));
$filter->add($items);
//var_dump($filter); exit;
$items = array("firsttem", "seconditem", "thirditem");
foreach ($items as $item) {
    var_dump($filter->contains($item));
}
/* Add all items with multiple calls to add() and make sure contains() 
* finds them all. 
*/
$filter = new BloomFilter(100, BloomFilter::getHashCount(100, 3));
foreach ($items as $item) {
    $filter->add($item);
}
$items = array("fir sttem", "secondit em", "thir ditem");
foreach ($items as $item) {
    var_dump($filter->contains($item));
}
Beispiel #3
0
 public function bloomy()
 {
     $bf = new BloomFilter(100, 0.01);
     $bf->add("aaaa");
     $bf->has("dddd");
     $a = get_object_vars($bf);
     $b = get_class_methods('BloomFilter');
     $c = get_class_vars('BloomFilter');
     $d = $bf->getInfo();
     var_dump($a, $b, $c, $d);
 }
<?php

require_once 'lib/BloomFilter.php';
$bf = new BloomFilter(100000, 3);
$bf->add('value');
if ($bf->has('value')) {
    echo "has";
} else {
    echo "nopes";
}