Package org.leskes.test.elasticfacets.fields

Source Code of org.leskes.test.elasticfacets.fields.MultiValueOrdinalArrayTests$smallMultiValueOrdinalArray

package org.leskes.test.elasticfacets.fields;

import org.elasticsearch.ElasticSearchException;
import org.elasticsearch.common.RamUsage;
import org.elasticsearch.common.trove.list.array.TIntArrayList;
import org.elasticsearch.index.field.data.FieldData;
import org.leskes.elasticfacets.fields.MultiValueOrdinalArray;
import org.testng.annotations.Test;

import java.util.ArrayList;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;

public class MultiValueOrdinalArrayTests {

   protected int STORAGE_SIZE = 8;

   class smallMultiValueOrdinalArray extends MultiValueOrdinalArray {

      public smallMultiValueOrdinalArray(int[] ordinalsNoPerDoc) {
         super(ordinalsNoPerDoc,STORAGE_SIZE);
      }
   }

   protected TIntArrayList collectOrdinals(MultiValueOrdinalArray a,int docId) {
      final TIntArrayList ol = new TIntArrayList();
      a.forEachOrdinalInDoc(docId, new FieldData.OrdinalInDocProc() {
         @Override
         public void onOrdinal(int docId, int ordinal) {
            ol.add(ordinal);
         }
      });
      return ol;
   }

   protected void regressToArray(ArrayList<int[]> ordinalsPerDoc) {
      // invert ordinalsPerDoc to the structure MultiValueOrdinalArray expects

      smallMultiValueOrdinalArray a = getSmallMultiValueOrdinalArray(ordinalsPerDoc);

      for (int doc=0;doc<ordinalsPerDoc.size();doc++) {
         assertThat(collectOrdinals(a, doc),
                 equalTo(new TIntArrayList(ordinalsPerDoc.get(doc))));
      }
   }

   private smallMultiValueOrdinalArray getSmallMultiValueOrdinalArray(ArrayList<int[]> ordinalsPerDoc) {
      int[] ordinalsNoPerDoc = new int[ordinalsPerDoc.size()];
      for (int doc=0; doc < ordinalsNoPerDoc.length; doc++) {
         ordinalsNoPerDoc[doc] = ordinalsPerDoc.get(doc).length;
      }

      smallMultiValueOrdinalArray ret = new smallMultiValueOrdinalArray(ordinalsNoPerDoc);

      MultiValueOrdinalArray.MultiValueOrdinalLoader loader = ret.createLoader();

      for (int doc=0;doc<ordinalsPerDoc.size();doc++) {
         for (int o : ordinalsPerDoc.get(doc))
            loader.addDocOrdinal(doc,o);
      }

      return ret;
   }

   @Test
   public void testSingleValue() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1});
      o.add(new int[] {0});
      o.add(new int[] {1});
      o.add(new int[] {2});
      o.add(new int[] {3});

      regressToArray(o);
   }

   @Test
   public void testSingleDocMultiValue() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1,2});
      regressToArray(o);
   }


   @Test
   public void testStorageOverflow() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1});
      o.add(new int[] {0});
      o.add(new int[] {1});
      o.add(new int[] {1,2,3,4,5,6});
      o.add(new int[] {3});
      o.add(new int[] {1,2,3,4});
      regressToArray(o);
   }


   @Test
   public void testComputeSizeInBytes() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1});
      o.add(new int[] {0});
      o.add(new int[] {1});
      o.add(new int[] {1,2,3,4,5,6});
      smallMultiValueOrdinalArray a = getSmallMultiValueOrdinalArray(o);
      assertThat(a.computeSizeInBytes(),greaterThan(9L* RamUsage.NUM_BYTES_INT));
   }

   @Test
   public void testHasValue() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1});
      o.add(new int[] {0});
      o.add(new int[] {1});
      o.add(new int[] {1,2,3,4,5,6});
      smallMultiValueOrdinalArray a = getSmallMultiValueOrdinalArray(o);
      assertThat(a.hasValue(0),equalTo(true));
      assertThat(a.hasValue(1),equalTo(false));
      assertThat(a.hasValue(2),equalTo(true));
      assertThat(a.hasValue(3),equalTo(true));
   }

   @Test(expectedExceptions = { ElasticSearchException.class } )
   public void testImpossibleStorageOverflow() {
      ArrayList<int[]> o = new ArrayList<int[]>();
      o.add(new int[] {1});
      o.add(new int[] {0});
      o.add(new int[] {1});
      o.add(new int[] {1,2,3,4,5,6,7,8});
      o.add(new int[] {3});
      regressToArray(o);
   }

}
TOP

Related Classes of org.leskes.test.elasticfacets.fields.MultiValueOrdinalArrayTests$smallMultiValueOrdinalArray

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.