Package orestes.bloomfilter.test.cachesketch

Source Code of orestes.bloomfilter.test.cachesketch.ExpiringTest

package orestes.bloomfilter.test.cachesketch;

import orestes.bloomfilter.FilterBuilder;
import orestes.bloomfilter.cachesketch.ExpiringBloomFilter;
import org.junit.Test;

import java.util.stream.IntStream;

import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue;

public class ExpiringTest {

    private long fromMillis(long millis) {
        return millis * 1_000_000;
    }

    @Test
    public void addAndLetExpire() throws Exception {
        FilterBuilder b = new FilterBuilder(1000, 0.05);
        ExpiringBloomFilter<String> filter = new ExpiringBloomFilter<String>(b);
        filter.reportRead("1", fromMillis(100));
        assertTrue(filter.isCached("1"));
        assertFalse(filter.contains("1"));
        filter.reportWrite("1");
        assertTrue(filter.contains("1"));
        Thread.sleep(110);
        assertFalse(filter.contains("1"));
    }

    @Test
    public void exceedCapacity() {
        FilterBuilder b = new FilterBuilder(100, 0.05);
        ExpiringBloomFilter<String> filter = new ExpiringBloomFilter<>(b);

        IntStream.range(0, 200).forEach(i -> {
            filter.reportRead(String.valueOf(i), fromMillis(1000));
            filter.reportWrite(String.valueOf(i));
            //System.out.println(filter.getEstimatedPopulation() + ":" + filter.getEstimatedFalsePositiveProbability());
        });
        //System.out.println(filter.getFalsePositiveProbability(200));

        //fpp exceeded
        assertTrue(filter.getEstimatedFalsePositiveProbability() > 0.05);
        //Less then 10% difference between estimated and precise fpp
        assertTrue(Math.abs(1-filter.getEstimatedFalsePositiveProbability()/filter.getFalsePositiveProbability(200)) < 0.1);
    }

}
TOP

Related Classes of orestes.bloomfilter.test.cachesketch.ExpiringTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.