// Copyright 2014 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package marmot.test.util; import static org.junit.Assert.assertEquals; import java.util.Random; import marmot.util.Copy; import marmot.util.Encoder; import org.junit.Test; public class EncoderTest { @Test public void testBitsNeeded() { assertEquals(1, Encoder.bitsNeeded(0)); assertEquals(1, Encoder.bitsNeeded(1)); assertEquals(2, Encoder.bitsNeeded(2)); assertEquals(2, Encoder.bitsNeeded(3)); assertEquals(3, Encoder.bitsNeeded(4)); assertEquals(3, Encoder.bitsNeeded(5)); assertEquals(3, Encoder.bitsNeeded(6)); assertEquals(3, Encoder.bitsNeeded(7)); assertEquals(4, Encoder.bitsNeeded(8)); for (int i = 0; i < 1000; i++) { int expected_num_bits = Integer.toBinaryString(i).length(); assertEquals(expected_num_bits, Encoder.bitsNeeded(i)); } } @Test public void testStoreState() { Random random = new Random(42); for (int trial = 0; trial < 10; trial ++) { Encoder encoder = new Encoder(6); randomAppend(random, encoder, 100, 15); Encoder copy = Copy.clone(encoder); encoder.storeState(); for (int append_trial = 0; append_trial < 10; append_trial++) { randomAppend(random, encoder, 100, 15); encoder.restoreState(); System.err.println(copy); System.err.println(encoder); assertEquals(copy, encoder); } } } private void randomAppend(Random random, Encoder encoder, int max_max_value, int max_num_append) { int num_appends = random.nextInt(max_num_append + 1); for (int i=0; i<num_appends; i++) { int max_value = random.nextInt(max_max_value + 1); int value = random.nextInt(max_value + 1); encoder.append(value, Encoder.bitsNeeded(max_value)); } } }