/* Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved. Contact: SYSTAP, LLC DBA Blazegraph 2501 Calvert ST NW #106 Washington, DC 20008 licenses@blazegraph.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Created on Aug 6, 2009 */ package com.bigdata.btree.raba.codec; import it.unimi.dsi.fastutil.bytes.custom.CustomByteArrayFrontCodedList; import java.io.UnsupportedEncodingException; import java.util.Arrays; import com.bigdata.btree.raba.IRaba; import com.bigdata.btree.raba.ReadOnlyKeysRaba; /** * Test suite for the {@link FrontCodedRabaCoder}. * * @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a> * @version $Id$ */ public class AbstractFrontCodedRabaCoderTestCase extends AbstractRabaCoderTestCase { /** * */ public AbstractFrontCodedRabaCoderTestCase() { } /** * @param name */ public AbstractFrontCodedRabaCoderTestCase(String name) { super(name); } /** * Unit test demonstrates and verifies front coding of a well known example * with a ratio of 4. * * @throws UnsupportedEncodingException */ public void test_example_ratio4() throws UnsupportedEncodingException { final byte[][] a = new byte[4][]; a[0] = "foo".getBytes("US-ASCII"); a[1] = "foobar".getBytes("US-ASCII"); a[2] = "fool".getBytes("US-ASCII"); a[3] = "football".getBytes("US-ASCII"); final IRaba expected = new ReadOnlyKeysRaba(a); // front-code the list. final int ratio = 4; final CustomByteArrayFrontCodedList frontCodedList = new CustomByteArrayFrontCodedList( expected.iterator(), ratio); { final byte[] t = frontCodedList.getBackingBuffer().toArray(); System.out.println("coded: " + Arrays.toString(t)); } for (int i = 0; i < a.length; i++) { assertEquals("get(" + i + ")", a[i], frontCodedList.get(i)); assertEquals("length(" + i + ")", a[i].length, frontCodedList .arrayLength(i)); } for (int i = 0; i < a.length; i++) { assertEquals("search(" + i + ")", i, frontCodedList.search(a[i])); } } /** * Unit test demonstrates and verifies front coding of a well known example * with a ratio of 3. * * @throws UnsupportedEncodingException */ public void test_example_ratio3() throws UnsupportedEncodingException { final byte[][] a = new byte[4][]; a[0] = "foo".getBytes("US-ASCII"); a[1] = "foobar".getBytes("US-ASCII"); a[2] = "fool".getBytes("US-ASCII"); a[3] = "football".getBytes("US-ASCII"); final IRaba expected = new ReadOnlyKeysRaba(a); // front-code the list. final int ratio = 3; final CustomByteArrayFrontCodedList frontCodedList = new CustomByteArrayFrontCodedList( expected.iterator(), ratio); { final byte[] t = frontCodedList.getBackingBuffer().toArray(); System.out.println("coded: " + Arrays.toString(t)); } for (int i = 0; i < a.length; i++) { assertEquals("get(" + i + ")", a[i], frontCodedList.get(i)); assertEquals("length(" + i + ")", a[i].length, frontCodedList .arrayLength(i)); } assertEquals("search(" + 2 + ")", 2, frontCodedList.search(a[2])); for (int i = 0; i < a.length; i++) { assertEquals("search(" + i + ")", i, frontCodedList.search(a[i])); } } /** * Unit test demonstrates and verifies front coding of a well known example * using a ratio of 2. * * @throws UnsupportedEncodingException */ public void test_example1_ratio2() throws UnsupportedEncodingException { final byte[][] a = new byte[4][]; a[0] = "foo".getBytes("US-ASCII"); a[1] = "foobar".getBytes("US-ASCII"); a[2] = "fool".getBytes("US-ASCII"); a[3] = "football".getBytes("US-ASCII"); final IRaba expected = new ReadOnlyKeysRaba(a); // front-code the list. final int ratio = 2; final CustomByteArrayFrontCodedList frontCodedList = new CustomByteArrayFrontCodedList( expected.iterator(), ratio); { final byte[] t = frontCodedList.getBackingBuffer().toArray(); System.out.println("coded: " + Arrays.toString(t)); } for (int i = 0; i < a.length; i++) { assertEquals("get(" + i + ")", a[i], frontCodedList.get(i)); assertEquals("length(" + i + ")", a[i].length, frontCodedList .arrayLength(i)); } for (int i = 0; i < a.length; i++) { assertEquals("search(" + i + ")", i, frontCodedList.search(a[i])); } } /** * Unit test demonstrates and verifies front coding of a well known example * using a ratio of 1 (no compression). * * @throws UnsupportedEncodingException */ public void test_example1_ratio1() throws UnsupportedEncodingException { final byte[][] a = new byte[4][]; a[0] = "foo".getBytes("US-ASCII"); a[1] = "foobar".getBytes("US-ASCII"); a[2] = "fool".getBytes("US-ASCII"); a[3] = "football".getBytes("US-ASCII"); final IRaba expected = new ReadOnlyKeysRaba(a); // front-code the list. final int ratio = 1; final CustomByteArrayFrontCodedList frontCodedList = new CustomByteArrayFrontCodedList( expected.iterator(), ratio); { final byte[] t = frontCodedList.getBackingBuffer().toArray(); System.out.println("coded: " + Arrays.toString(t)); } for (int i = 0; i < a.length; i++) { assertEquals("get(" + i + ")", a[i], frontCodedList.get(i)); assertEquals("length(" + i + ")", a[i].length, frontCodedList .arrayLength(i)); } for (int i = 0; i < a.length; i++) { assertEquals("search(" + i + ")", i, frontCodedList.search(a[i])); } } }