Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import static org.junit.Assert.*;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.function.Function;
- import org.junit.Test;
- public class HuffmanTest {
- private Huffman h;
- @Test(expected = IllegalArgumentException.class)
- public void huffmanFromNullStringTest() {
- String s = null;
- new Huffman(s);
- }
- @Test(expected = IllegalArgumentException.class)
- public void huffManFromEmptyStringTest() {
- new Huffman("");
- }
- @Test(expected = IllegalArgumentException.class)
- public void huffmanFromOneCharacterStringTest() {
- new Huffman("aaaaaaaa");
- }
- @Test(expected = IllegalArgumentException.class)
- public void huffmanFromNullMapTest() {
- Map<Character, Integer> myMap = null;
- new Huffman(myMap);
- }
- @Test(expected = IllegalArgumentException.class)
- public void huffManFromEmptyMapTest() {
- new Huffman(new HashMap<Character, Integer>());
- }
- @Test(expected = IllegalArgumentException.class)
- public void huffmanFromOneCharacterTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 5);
- new Huffman(myMap);
- }
- @Test(expected = IllegalArgumentException.class)
- public void compressNullTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 5);
- myMap.put('b', 4);
- new Huffman(myMap).compress(null);
- }
- @Test(expected = IllegalArgumentException.class)
- public void compressIllegalTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 5);
- myMap.put('b', 4);
- new Huffman(myMap).compress("c");
- }
- @Test(expected = IllegalArgumentException.class)
- public void decompressNullTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 5);
- myMap.put('b', 4);
- new Huffman(myMap).decompress(null);
- }
- @Test(expected = IllegalArgumentException.class)
- public void decompressIllegalTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 5);
- myMap.put('b', 4);
- new Huffman(myMap).decompress("010120101");
- }
- @Test(expected = IllegalArgumentException.class)
- public void decompressNotFoundTest() {
- Map<Character, Integer> myMap = new HashMap<Character, Integer>();
- myMap.put('a', 1);
- myMap.put('b', 1);
- myMap.put('c', 1);
- myMap.put('d', 1);
- // odd length should throw an exception
- new Huffman(myMap).decompress("00110");
- }
- @Test(expected = IllegalStateException.class)
- public void noRatioYetTest() {
- new Huffman("ab").compressionRatio();
- }
- @Test
- public void compressSimpleTest() {
- h = new Huffman("ab");
- assertEquals("0", h.compress("a"));
- assertEquals("1", h.compress("b"));
- }
- @Test
- public void compressMediumTest() {
- h = new Huffman("abcc");
- assertEquals("00", h.compress("a"));
- assertEquals("01", h.compress("b"));
- assertEquals("1", h.compress("c"));
- assertEquals("0001110100", h.compress("abccba"));
- }
- @Test
- public void decompressSimpleTest() {
- h = new Huffman("ab");
- assertEquals("a", h.decompress("0"));
- assertEquals("b", h.decompress("1"));
- }
- @Test
- public void decompressMediumTest() {
- h = new Huffman("abcc");
- assertEquals("a", h.decompress("00"));
- assertEquals("b", h.decompress("01"));
- assertEquals("c", h.decompress("1"));
- assertEquals("abccba", h.decompress("0001110100"));
- }
- @Test
- public void simpleRatioTest() {
- h = new Huffman("abc");
- h.compress("a");
- assertEquals(1.0 / 8.0, h.compressionRatio(), 0);
- }
- @Test
- public void complexRatioTest() {
- h = new Huffman("abc");
- h.compress("abcababcabbaacb");
- assertEquals(27.0 / 240.0, h.compressionRatio(), 0);
- }
- @Test
- public void identityTest() {
- h = new Huffman("sagfcafascweprouwqepoityolmaznxmknjdbdchdgvagasdfawiefuifnarfnsfij");
- Function<String, String> compress = h::compress;
- Function<String, String> decompress = h::decompress;
- Function<String, String> identity = compress.andThen(decompress);
- String[] strings = { "abc", "dfsadfsd", "werwqwewqqwwwwwwererrtopskvd",
- "sgsfswordoiojmomcsdacioansiond", "sdafsa", "helloworld",
- "thisisnotasubliminalmessage",
- "sakfdjaslvnsajdklcnskljcmaijfnjsdkasknfjskaldnfsjakfdsdkfsklfdnsadklfh" };
- for (String s : strings) {
- assertEquals(s, identity.apply(s));
- }
- }
- @Test
- public void expectedEncodingLengthSmallTest() {
- h = new Huffman("ab");
- assertEquals(1, h.expectedEncodingLength(), 0);
- }
- @Test
- public void expectedEncodingLengthMediumTest() {
- h = new Huffman("abc");
- assertEquals(5.0 / 3.0, h.expectedEncodingLength(), Math.ulp(2));
- }
- @Test
- public void expectedEncodingLengthLongTest() {
- h = new Huffman("aaaaaaaaaaaaaaaaaabcde");
- assertEquals(13.0 / 5.0, h.expectedEncodingLength(), Math.ulp(3));
- }
- @Test
- public void expectedEncodingLengthAlphabetTest() {
- h = new Huffman("qwertyuiopasdfghjklzxcvbnm");
- // 20 chars have a length 5 encoding
- // 6 chars have a length 4 encoding
- assertEquals((20 * 5 + 6 * 4) / 26.0, h.expectedEncodingLength(), 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement