Advertisement
Guest User

Untitled

a guest
Nov 29th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. import static org.junit.Assert.*;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.function.Function;
  6.  
  7. import org.junit.Test;
  8.  
  9. public class HuffmanTest {
  10.  
  11. private Huffman h;
  12.  
  13. @Test(expected = IllegalArgumentException.class)
  14. public void huffmanFromNullStringTest() {
  15. String s = null;
  16. new Huffman(s);
  17. }
  18.  
  19. @Test(expected = IllegalArgumentException.class)
  20. public void huffManFromEmptyStringTest() {
  21. new Huffman("");
  22. }
  23.  
  24. @Test(expected = IllegalArgumentException.class)
  25. public void huffmanFromOneCharacterStringTest() {
  26. new Huffman("aaaaaaaa");
  27. }
  28.  
  29. @Test(expected = IllegalArgumentException.class)
  30. public void huffmanFromNullMapTest() {
  31. Map<Character, Integer> myMap = null;
  32. new Huffman(myMap);
  33. }
  34.  
  35. @Test(expected = IllegalArgumentException.class)
  36. public void huffManFromEmptyMapTest() {
  37. new Huffman(new HashMap<Character, Integer>());
  38. }
  39.  
  40. @Test(expected = IllegalArgumentException.class)
  41. public void huffmanFromOneCharacterTest() {
  42. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  43. myMap.put('a', 5);
  44. new Huffman(myMap);
  45. }
  46.  
  47. @Test(expected = IllegalArgumentException.class)
  48. public void compressNullTest() {
  49. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  50. myMap.put('a', 5);
  51. myMap.put('b', 4);
  52. new Huffman(myMap).compress(null);
  53. }
  54.  
  55. @Test(expected = IllegalArgumentException.class)
  56. public void compressIllegalTest() {
  57. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  58. myMap.put('a', 5);
  59. myMap.put('b', 4);
  60. new Huffman(myMap).compress("c");
  61. }
  62.  
  63. @Test(expected = IllegalArgumentException.class)
  64. public void decompressNullTest() {
  65. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  66. myMap.put('a', 5);
  67. myMap.put('b', 4);
  68. new Huffman(myMap).decompress(null);
  69. }
  70.  
  71. @Test(expected = IllegalArgumentException.class)
  72. public void decompressIllegalTest() {
  73. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  74. myMap.put('a', 5);
  75. myMap.put('b', 4);
  76. new Huffman(myMap).decompress("010120101");
  77. }
  78.  
  79. @Test(expected = IllegalArgumentException.class)
  80. public void decompressNotFoundTest() {
  81. Map<Character, Integer> myMap = new HashMap<Character, Integer>();
  82. myMap.put('a', 1);
  83. myMap.put('b', 1);
  84. myMap.put('c', 1);
  85. myMap.put('d', 1);
  86. // odd length should throw an exception
  87. new Huffman(myMap).decompress("00110");
  88. }
  89.  
  90. @Test(expected = IllegalStateException.class)
  91. public void noRatioYetTest() {
  92. new Huffman("ab").compressionRatio();
  93. }
  94.  
  95. @Test
  96. public void compressSimpleTest() {
  97. h = new Huffman("ab");
  98. assertEquals("0", h.compress("a"));
  99. assertEquals("1", h.compress("b"));
  100. }
  101.  
  102. @Test
  103. public void compressMediumTest() {
  104. h = new Huffman("abcc");
  105. assertEquals("00", h.compress("a"));
  106. assertEquals("01", h.compress("b"));
  107. assertEquals("1", h.compress("c"));
  108. assertEquals("0001110100", h.compress("abccba"));
  109. }
  110.  
  111. @Test
  112. public void decompressSimpleTest() {
  113. h = new Huffman("ab");
  114. assertEquals("a", h.decompress("0"));
  115. assertEquals("b", h.decompress("1"));
  116. }
  117.  
  118. @Test
  119. public void decompressMediumTest() {
  120. h = new Huffman("abcc");
  121. assertEquals("a", h.decompress("00"));
  122. assertEquals("b", h.decompress("01"));
  123. assertEquals("c", h.decompress("1"));
  124. assertEquals("abccba", h.decompress("0001110100"));
  125. }
  126.  
  127. @Test
  128. public void simpleRatioTest() {
  129. h = new Huffman("abc");
  130. h.compress("a");
  131. assertEquals(1.0 / 8.0, h.compressionRatio(), 0);
  132. }
  133.  
  134. @Test
  135. public void complexRatioTest() {
  136. h = new Huffman("abc");
  137. h.compress("abcababcabbaacb");
  138. assertEquals(27.0 / 240.0, h.compressionRatio(), 0);
  139. }
  140.  
  141. @Test
  142. public void identityTest() {
  143. h = new Huffman("sagfcafascweprouwqepoityolmaznxmknjdbdchdgvagasdfawiefuifnarfnsfij");
  144. Function<String, String> compress = h::compress;
  145. Function<String, String> decompress = h::decompress;
  146.  
  147. Function<String, String> identity = compress.andThen(decompress);
  148.  
  149. String[] strings = { "abc", "dfsadfsd", "werwqwewqqwwwwwwererrtopskvd",
  150. "sgsfswordoiojmomcsdacioansiond", "sdafsa", "helloworld",
  151. "thisisnotasubliminalmessage",
  152. "sakfdjaslvnsajdklcnskljcmaijfnjsdkasknfjskaldnfsjakfdsdkfsklfdnsadklfh" };
  153.  
  154. for (String s : strings) {
  155. assertEquals(s, identity.apply(s));
  156. }
  157.  
  158. }
  159.  
  160. @Test
  161. public void expectedEncodingLengthSmallTest() {
  162. h = new Huffman("ab");
  163. assertEquals(1, h.expectedEncodingLength(), 0);
  164. }
  165.  
  166. @Test
  167. public void expectedEncodingLengthMediumTest() {
  168. h = new Huffman("abc");
  169. assertEquals(5.0 / 3.0, h.expectedEncodingLength(), Math.ulp(2));
  170. }
  171.  
  172. @Test
  173. public void expectedEncodingLengthLongTest() {
  174. h = new Huffman("aaaaaaaaaaaaaaaaaabcde");
  175. assertEquals(13.0 / 5.0, h.expectedEncodingLength(), Math.ulp(3));
  176. }
  177.  
  178. @Test
  179. public void expectedEncodingLengthAlphabetTest() {
  180. h = new Huffman("qwertyuiopasdfghjklzxcvbnm");
  181. // 20 chars have a length 5 encoding
  182. // 6 chars have a length 4 encoding
  183. assertEquals((20 * 5 + 6 * 4) / 26.0, h.expectedEncodingLength(), 0);
  184. }
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement