Package com.senseidb.search.query.filters

Source Code of com.senseidb.search.query.filters.TestSenseiTermFilter

package com.senseidb.search.query.filters;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.facets.FacetHandler;
import com.browseengine.bobo.facets.data.MultiValueFacetDataCache;
import com.browseengine.bobo.facets.data.TermStringList;
import com.browseengine.bobo.facets.data.TermValueList;
import com.browseengine.bobo.facets.impl.MultiValueFacetHandler;

import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.expect;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.reset;
import static org.junit.Assert.assertArrayEquals;

public class TestSenseiTermFilter {

  private String[] vals = new String[]{"a", "c", "e"};
  private int[] freqs;
  TermValueList<String> dictionary = new TermStringList();

  @Before
  public void setup() {
    dictionary = new TermStringList();

    freqs = new int[27];
    dictionary.add(null);
    for(char ch = 'a'; ch <= 'z'; ch++) {
      dictionary.add("" + ch);
      freqs[1 + ch - 'a'] = 'z' - ch + 1;
    }
  }


  @Test
  public void testGetValsByFrequency() {

    List<String> dummy = new ArrayList<String>();
    DocIdSetCardinality andCardinality = DocIdSetCardinality.one();
    String andVals[] = SenseiTermFilter.getValsByFrequency(vals, freqs, 26, andCardinality, dictionary, dummy, true);
    assertArrayEquals(andVals, new String[]{"e", "c", "a"});
    DocSetAssertions.assertRange(18, 22, 26, andCardinality);

    DocIdSetCardinality orCardinality = DocIdSetCardinality.zero();
    String orgVals[] = SenseiTermFilter.getValsByFrequency(vals, freqs, 26, orCardinality, dictionary, dummy, false);
    assertArrayEquals(orgVals, new String[]{"a", "c", "e"});
    DocSetAssertions.assertRange(26, 26, 26, orCardinality);
  }

  @Test
  public void testSenseiTermFilter() throws IOException {
    SenseiTermFilter orTermFilter =
        new SenseiTermFilter("column", vals, null, false, false);

    BoboIndexReader indexReader = createMock(BoboIndexReader.class);

    MultiValueFacetDataCache facetDataCache =
        new MultiValueFacetDataCache();
    facetDataCache.valArray = dictionary;
    facetDataCache.freqs = freqs;

    FacetHandler facetHandler =
        new MultiValueFacetHandler("column", 32);

    expect(indexReader.maxDoc()).andReturn(1000).anyTimes();
    expect(indexReader.getFacetHandler("column")).andReturn(facetHandler);
    expect(indexReader.getFacetData("column")).andReturn(facetDataCache).anyTimes();
    replay(indexReader);

    SenseiDocIdSet orDocIdSet = orTermFilter.getSenseiDocIdSet(indexReader);
    DocSetAssertions.assertRange(26, 72, 1000, orDocIdSet.getCardinalityEstimate());

    SenseiTermFilter andTermFilter =
        new SenseiTermFilter("column", vals, null, true, false);

    reset(indexReader);
    expect(indexReader.maxDoc()).andReturn(1000).anyTimes();
    expect(indexReader.getFacetHandler("column")).andReturn(facetHandler);
    expect(indexReader.getFacetData("column")).andReturn(facetDataCache).anyTimes();
    replay(indexReader);

    SenseiDocIdSet andDocIdSet = andTermFilter.getSenseiDocIdSet(indexReader);
    DocSetAssertions.assertRange(0, 22, 1000, andDocIdSet.getCardinalityEstimate());
  }
}
TOP

Related Classes of com.senseidb.search.query.filters.TestSenseiTermFilter

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.