Package cleo.search.test

Source Code of cleo.search.test.TestBloomFilter

/*
* Copyright (c) 2011 LinkedIn, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package cleo.search.test;

import cleo.search.Element;
import cleo.search.SimpleElement;
import cleo.search.filter.BloomFilter;
import cleo.search.filter.FnvBloomFilter;
import cleo.search.filter.FnvBloomFilterLong;
import junit.framework.TestCase;

/**
* TestBloomFilter
*
* @author jwu
* @since 01/14, 2011
*/
public class TestBloomFilter extends TestCase {
 
  public TestBloomFilter(String name) {
    super(name);
  }
 
  protected Element createElement(int id, String... terms) {
    Element elem = new SimpleElement(id);
    elem.setTimestamp(System.currentTimeMillis());
    elem.setTerms(terms);
    return elem;
  }
 
  protected BloomFilter<Integer> createBloomFilter(int prefixLength) {
    return new FnvBloomFilter(prefixLength);
  }
 
  private void doBasicOperations(int prefixLength) {
    String term;
    Element elem;
    int indexFilter, queryFilter;
   
    BloomFilter<Integer> bf = createBloomFilter(prefixLength);
   
    term = "Bloom";
    elem = createElement(1, term);
    indexFilter = bf.computeIndexFilter(elem);
    queryFilter = bf.computeQueryFilter(term);
    assertEquals(queryFilter, (indexFilter & queryFilter));
   
    term = "Filter";
    elem = createElement(1, term);
    indexFilter = bf.computeIndexFilter(elem);
    queryFilter = bf.computeQueryFilter(term);
    assertEquals(queryFilter, (indexFilter & queryFilter));
   
    String[] terms = { "Bloom", "Filter" };
    elem = createElement(2, terms);
    indexFilter = bf.computeIndexFilter(elem);
    queryFilter = bf.computeQueryFilter(terms);
    assertEquals(queryFilter, (indexFilter & queryFilter));
  }
 
  private void doFiltering(int prefixLength, String[] indexTerms, String[] queryTerms) {
    BloomFilter<Integer> bf = createBloomFilter(prefixLength);
   
    Element elem = createElement(2, indexTerms);
    int indexFilter = bf.computeIndexFilter(elem);
    int queryFilter = bf.computeQueryFilter(queryTerms);
    assertEquals(queryFilter, (indexFilter & queryFilter));
  }
 
  public void testBasicOperations() {
    doBasicOperations(0);
    doBasicOperations(1);
    doBasicOperations(2);
    doBasicOperations(3);
    doBasicOperations(4);
    doBasicOperations(5);
    doBasicOperations(10);
  }
 
  public void testNameFiltering() {
    String[] indexTerms, queryTerms = null;
   
    indexTerms = new String[] {"jingwei", "wu", "linkedin"};
    queryTerms = new String[] {"j", "wu" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"jing", "wu" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"wu", "ji" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"jingwei", "linked" };
    doFiltering(3, indexTerms, queryTerms);
   
    indexTerms = new String[] {"jiong", "wang", "linkedin"};
    queryTerms = new String[] {"j", "wa" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"jiong", "w" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"jion", "wan" };
    doFiltering(3, indexTerms, queryTerms);
   
    queryTerms = new String[] {"wang", "linkedin" };
    doFiltering(3, indexTerms, queryTerms);
  }
 
  public void testFnvBloomFilter() {
    int indexFilter, queryFilter;
    BloomFilter<Integer> filter = new FnvBloomFilter(2);
   
    Element element = createElement(1, new String[] {"professional", "social", "network"});
    indexFilter = filter.computeIndexFilter(element);
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "social", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"social", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "social"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"pro", "net"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"p", "n"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
  }
 
  public void testFnvBloomFilterLong() {
    long indexFilter, queryFilter;
    BloomFilter<Long> filter = new FnvBloomFilterLong(2);
   
    Element element = createElement(1, new String[] {"professional", "social", "network"});
    indexFilter = filter.computeIndexFilter(element);
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "social", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"social", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "network"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"professional", "social"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"pro", "net"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
   
    queryFilter = filter.computeQueryFilter(new String[]{"p", "n"});
    assertEquals(queryFilter, (queryFilter & indexFilter));
  }
}
TOP

Related Classes of cleo.search.test.TestBloomFilter

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.