package org.itadaki.bzip2; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.itadaki.bzip2.BZip2DivSufSort; import org.junit.Test; /** * Tests BZip2DivSufSort */ public class TestBZip2DivSufSort { /** * Tests a bug whereby trIntroSort() doesn't terminate * * @throws IOException */ @Test(timeout = 2000) public void testBug1() throws IOException { String expectedData = "dddddddddeeeeeeeeesssssssssyyyyyyyyy,,,,,,,,,eeeeeeeeeaaaaaaaaassssssssseeeeeeeeesss" + "ssssssbbbbbbbbbwwwwwwwww hhhhhhhhhlllllllllMMMMMMMMM wwwwwwwwwmmmmmm" + "mmmeeeeeeeeeaaaaaaaaatttttttttlllllllllccccccccceeeeeeeeelllllllll " + "wwwwwwwwwhhhhhhhhh lllllllll tttttttttfffffffff aaaaaaaaasss" + "ssssssnnnnnnnnnaaaaaaaaatttttttttaaaaaaaaaaaaaaaaaa iiiiiiiiitttttttttiiiiii" + "iiiiiiiiiiiiooooooooo rrrrrrrrr"; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); for (int i = 0; i < 9; i++) { outputStream.write("Mary had a little lamb, its fleece was white as snow".getBytes()); } outputStream.write(0); byte[] input = outputStream.toByteArray(); input[input.length - 1] = input[0]; int[] output = new int[input.length]; new BZip2DivSufSort(input, output, input.length - 1).bwt(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < output.length; i++) { sb.append((char) output[i]); } assertEquals(expectedData, sb.toString()); } }