/*
* Copyright 2014 Takao Nakaguchi
*
* 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 org.trie4j.tail;
import org.junit.Assert;
import org.junit.Test;
import org.trie4j.bv.BytesSuccinctBitVector;
import org.trie4j.louds.TailLOUDSTrie;
import org.trie4j.patricia.TailPatriciaTrie;
import org.trie4j.tail.builder.ConcatTailBuilder;
import org.trie4j.tail.index.SBVTailIndex;
import org.trie4j.test.WikipediaTitles;
import org.trie4j.util.IntArray;
public class SBVConcatTailArrayTest {
@Test
public void test() throws Exception{
// 普通にSBVConcatTailArrayIndexBuilder使った場合と、
// add毎にappendするTailArrayIndexBuilderを作ってそれを使った
// 場合でbitvectorやcacheに差が出るか調べる
TailPatriciaTrie org = new TailPatriciaTrie(new ConcatTailBuilder());
new WikipediaTitles().insertTo(org);
TailLOUDSTrie louds1 = new TailLOUDSTrie(org, new SBVConcatTailArrayAppendingBuilder());
new WikipediaTitles().assertAllContains(louds1);
BytesSuccinctBitVector sbv1 = (BytesSuccinctBitVector)((SBVTailIndex)((DefaultTailArray)louds1.getTailArray()).getTailIndex()).getSbv();
TailLOUDSTrie louds2 = new TailLOUDSTrie(org, new SBVConcatTailArrayBuilder());
new WikipediaTitles().assertAllContains(louds2);
BytesSuccinctBitVector sbv2 = (BytesSuccinctBitVector)((SBVTailIndex)((DefaultTailArray)louds2.getTailArray()).getTailIndex()).getSbv();
{
int n = sbv1.size();
System.out.println("sbv size: " + n);
Assert.assertEquals(n, sbv2.size());
for(int i = 0; i < n; i++){
Assert.assertEquals(i + "th bit", sbv1.get(i), sbv2.get(i));
}
}
{
int[] countCache1 = sbv1.getCountCache0();
int[] countCache2 = sbv2.getCountCache0();
int n = countCache1.length;
System.out.println("countCache0 size should be: " + (sbv1.size() / 64 + 1));
System.out.println("countCache0 size: " + n);
// Assert.assertEquals(n, countCache2.length);
n = Math.min(countCache1.length, countCache2.length);
for(int i = 0; i < n; i++){
Assert.assertEquals(i + "th index cache.", countCache1[i], countCache2[i]);
}
}
{
IntArray indexCache1 = sbv1.getIndexCache0();
IntArray indexCache2 = sbv2.getIndexCache0();
int n = indexCache1.size();
System.out.println("indexCache0 size1: " + n);
System.out.println("indexCache0 size2: " + indexCache2.size());
// Assert.assertEquals(n, countCache2.length);
n = Math.min(indexCache1.size(), indexCache2.size());
for(int i = 0; i < 10; i++){
System.out.print(indexCache1.get(i) + ", ");
}
System.out.println();
for(int i = 0; i < 10; i++){
System.out.print(indexCache2.get(i) + ", ");
}
System.out.println();
for(int i = 0; i < n; i++){
Assert.assertEquals(i + "th index cache.", indexCache1.get(i), indexCache2.get(i));
}
}
}
}