package org.basex.util;
import static org.basex.util.Token.*;
import static org.junit.Assert.*;
import java.util.*;
import org.basex.*;
import org.basex.query.*;
import org.basex.query.iter.*;
import org.basex.query.value.item.*;
import org.basex.util.list.*;
import org.junit.*;
/**
* Class for testing the {@link Compress} methods.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class CompressTest extends SandboxTest {
/** Test. */
@Test
public void test1() {
run(token(" abcdefghijklmnopqrstuvwxyz"));
}
/** Test. */
@Test
public void test2() {
run(token("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
}
/** Test. */
@Test
public void test3() {
run(token("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890"));
}
/** Test. */
@Test
public void test4() {
final int bl = 65;
final byte[] bytes = new byte[bl];
for(int b = 0; b < bl; b++) bytes[b] = (byte) b;
run(bytes);
}
/** Test. */
@Test
public void test5() {
final int bl = 256;
final byte[] bytes = new byte[bl];
for(int b = 0; b < bytes.length; b++) bytes[b] = (byte) b;
run(bytes);
}
/** Test. */
@Test
public void test6() {
final int bl = 4096;
final byte[] bytes = new byte[bl];
for(int b = 0; b < bytes.length; b++) bytes[b] = (byte) (b & 0xFF);
run(bytes);
}
/** Test.
* @throws Exception exception */
@Test
public void test7() throws Exception {
texts("src/test/resources/xmark.xml");
}
/** Test.
* @throws Exception exception */
@Test
public void test8() throws Exception {
texts("src/test/resources/factbook.zip");
}
/**
* Test on all text nodes of a document.
* @param file file to be parsed
* @throws Exception exception
*/
private static void texts(final String file) throws Exception {
final String query = "let $doc := doc('" + file + "')" +
"for $i in $doc//(@hohoho | text()) return data($i)";
final TokenList tl = new TokenList();
final TokenBuilder tb = new TokenBuilder();
try(QueryProcessor qp = new QueryProcessor(query, context)) {
final Iter iter = qp.iter();
for(Item it; (it = iter.next()) != null;) {
final byte[] token = it.string(null);
tl.add(token);
tb.add(token).add(' ');
}
}
run(tl.finish());
run(tb.finish());
}
/**
* Tests the correctness of the compressed tokens.
* @param tokens test tokens
*/
private static void run(final byte[]... tokens) {
for(final byte[] token : tokens) {
final byte[] cpr = Compress.pack(token);
if(token != cpr) {
final byte[] pln = Compress.unpack(cpr);
if(!eq(token, pln)) {
fail("\n[E] " + Arrays.toString(token) + ",\n[F] " + Arrays.toString(pln));
}
}
}
}
}