/*
* Copyright (c) 2015-2016, Christoph Engelbert (aka noctarius) and
* contributors. All rights reserved.
*
* 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 com.noctarius.tengi.spi.serialization.codec.impl;
import com.noctarius.tengi.spi.buffer.MemoryBuffer;
import com.noctarius.tengi.spi.serialization.Serializer;
import com.noctarius.tengi.spi.serialization.codec.AutoClosableDecoder;
import com.noctarius.tengi.spi.serialization.codec.AutoClosableEncoder;
import com.noctarius.tengi.testing.AbstractTestCase;
import org.junit.Test;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class BitSetCompressorTestCase
extends AbstractTestCase {
@Test
public void test_chunk_type_null_passed_null()
throws Exception {
boolean[] result = encodeAndDecode(null, 1);
assertNull(result);
}
@Test
public void test_chunk_type_null_passed_0_length()
throws Exception {
boolean[] result = encodeAndDecode(new boolean[0], 1);
assertNull(result);
}
@Test
public void test_chunk_type_single_1_value()
throws Exception {
boolean[] values = {true};
boolean[] result = encodeAndDecode(values, 1);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_single_2_values()
throws Exception {
boolean[] values = {false, true};
boolean[] result = encodeAndDecode(values, 1);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_single_3_values()
throws Exception {
boolean[] values = {true, false, true};
boolean[] result = encodeAndDecode(values, 1);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_double_4_values()
throws Exception {
boolean[] values = {true, false, false, true};
boolean[] result = encodeAndDecode(values, 2);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_double_5_values()
throws Exception {
boolean[] values = {true, false, false, true, true};
boolean[] result = encodeAndDecode(values, 2);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_double_10_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, true};
boolean[] result = encodeAndDecode(values, 2);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_quad_11_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, false, true};
boolean[] result = encodeAndDecode(values, 3);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_quad_14_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, false, true, false, true, true};
boolean[] result = encodeAndDecode(values, 4);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_quad_25_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, //
false, true, false, true, true, false, true, true, true, false, //
true, false, true, true, false, true};
boolean[] result = encodeAndDecode(values, 4);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_quad_26_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, //
false, true, false, true, true, false, true, true, true, false, //
true, false, true, true, false, true, true};
boolean[] result = encodeAndDecode(values, 5);
assertTrue(Arrays.equals(values, result));
}
@Test
public void test_chunk_type_quad_37_values()
throws Exception {
boolean[] values = {true, false, false, true, false, false, false, true, true, //
false, true, false, true, true, false, true, true, true, false, //
true, false, true, true, false, true, true, false, false, true, false, //
true, true, false, true, true, false, true};
boolean[] result = encodeAndDecode(values, 7);
assertTrue(Arrays.equals(values, result));
}
@Test(expected = IllegalStateException.class)
public void test_illegal_chunk_type()
throws Exception {
MemoryBuffer memoryBuffer = createMemoryBuffer();
Serializer serializer = createSerializer();
memoryBuffer.writeByte(0);
try(AutoClosableDecoder decoder = serializer.retrieveDecoder(memoryBuffer)) {
decoder.readBitSet();
}
}
private static boolean[] encodeAndDecode(boolean[] bitSet, int expectedSize)
throws Exception {
MemoryBuffer memoryBuffer = createMemoryBuffer();
Serializer serializer = createSerializer();
try (AutoClosableEncoder encoder = serializer.retrieveEncoder(memoryBuffer)) {
encoder.writeBitSet("test", bitSet);
}
assertEquals(expectedSize, memoryBuffer.writerIndex());
try (AutoClosableDecoder decoder = serializer.retrieveDecoder(memoryBuffer)) {
return decoder.readBitSet();
}
}
}