anchor.diff:  
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
  --spec prop_join([?BLOOM:key(),...], [?BLOOM:key(),...]) -> true.                                        
  +-spec prop_join([?BLOOM:key(),...], [?BLOOM:key(),...]) -> true.
   prop_join(List1, List2) ->
       BSize = erlang:length(List1) + erlang:length(List2),
       B1 = ?BLOOM:add_list(newBloom(BSize, 0.1), List1),
  
positive.code:     DestFpr = randoms:rand_uniform(1, 500) / 1000,
      %DestFpr = 0.01,
      FalsePositives = util:p_repeatAndAccumulate(
                         fun measure_fp/2, 
                         [DestFpr, ElementCount], 
                         ?Fpr_Test_NumTests, 
                         fun(X, Y) -> X + Y end, 
                         0),
      AvgFpr = FalsePositives / ?Fpr_Test_NumTests,
      ct:pal("FalsePositives=~p - NumberOfTests=~p - Elements=~p~n"
             "DestFpr: ~f~nMeasured Fpr: ~f~n
              BloomFilter=~p~n", 
             [FalsePositives, ?Fpr_Test_NumTests, ElementCount, DestFpr, AvgFpr,
              ?BLOOM:print(?BLOOM:new(ElementCount, DestFpr))]),
      %?assert(DestFpr >= AvgFpr orelse DestFpr * 1.3 >= AvgFpr), 
      true.
  
  tester_fpr(_) ->
  
negative.code: %% @doc measures false positives by adding 1..MaxElements into a new BF
  %%      and checking number of found items which are not in the BF
  measure_fp(DestFpr, MaxElements) ->
      BF = newBloom(MaxElements, DestFpr),
      BF1 = for_to_ex(1, MaxElements, fun(I) -> I end, fun(I, B) -> ?BLOOM:add(B, I) end, BF),
      NumNotIn = trunc(10 / DestFpr),
      %count found items which should not be in the bloom filter
      NumFound = for_to_ex(MaxElements + 1,
                           MaxElements + 1 + NumNotIn,
                           fun(I) -> case ?BLOOM:is_element(BF1, I) of
                                         true -> 1;
                                         false -> 0
  