package io.airlift.airship.shared;
import com.google.common.collect.ImmutableList;
import org.testng.annotations.Test;
import static com.google.common.collect.ImmutableList.of;
import static io.airlift.airship.shared.Strings.commonPrefixSegments;
import static io.airlift.airship.shared.Strings.shortestUniquePrefix;
import static io.airlift.airship.shared.Strings.trimLeadingSegments;
import static org.testng.Assert.assertEquals;
public class TestStrings
{
@Test
public void testCommonSegment()
{
assertEquals(commonPrefixSegments('/', ImmutableList.<String>of()), 0);
assertEquals(commonPrefixSegments('/', of("/")), 1);
assertEquals(commonPrefixSegments('/', of("/a")), 1);
assertEquals(commonPrefixSegments('/', of("/a", "/a")), 1);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a")), 3);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b")), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b")), 2);
}
@Test
public void testCommonSegmentWithMin()
{
assertEquals(commonPrefixSegments('/', ImmutableList.<String>of(), 2), 0);
assertEquals(commonPrefixSegments('/', of("/"), 0), 1);
assertEquals(commonPrefixSegments('/', of("/"), 1), 0);
assertEquals(commonPrefixSegments('/', of("/"), 2), 0);
assertEquals(commonPrefixSegments('/', of("/a"), 0), 1);
assertEquals(commonPrefixSegments('/', of("/a"), 1), 0);
assertEquals(commonPrefixSegments('/', of("/a"), 2), 0);
assertEquals(commonPrefixSegments('/', of("/a", "/a"), 0), 1);
assertEquals(commonPrefixSegments('/', of("/a", "/a"), 1), 0);
assertEquals(commonPrefixSegments('/', of("/a", "/a"), 2), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a"), 0), 3);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a"), 1), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a"), 2), 1);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a"), 3), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a"), 4), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b"), 0), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b"), 1), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b"), 2), 1);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b"), 3), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/b"), 4), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b"), 0), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b"), 1), 2);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b"), 2), 1);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b"), 3), 0);
assertEquals(commonPrefixSegments('/', of("/a/a/a", "/a/a/a", "/a/a/b"), 4), 0);
}
@Test
public void testTrim()
{
assertEquals(trimLeadingSegments("/a/b/c", '/', 0), "/a/b/c");
assertEquals(trimLeadingSegments("/a/b/c", '/', 1), "/b/c");
assertEquals(trimLeadingSegments("/a/b/c", '/', 2), "/c");
}
@Test
public void testShortestUniquePrefix()
{
assertEquals(shortestUniquePrefix(of("aa", "aaa")), 3);
assertEquals(shortestUniquePrefix(of("a")), 1);
assertEquals(shortestUniquePrefix(of("aaaaa")), 1);
assertEquals(shortestUniquePrefix(of("a", "b", "c")), 1);
assertEquals(shortestUniquePrefix(of("axxxxx", "b", "c")), 1);
assertEquals(shortestUniquePrefix(of("ax", "bx", "cx")), 1);
assertEquals(shortestUniquePrefix(of("ax", "ay", "cx")), 2);
assertEquals(shortestUniquePrefix(of("axxx", "ayyyy", "cxxxx")), 2);
assertEquals(shortestUniquePrefix(of("aaaax", "aaaay")), 5);
assertEquals(shortestUniquePrefix(of("aaaaxx", "aaaayx", "ccc")), 5);
assertEquals(shortestUniquePrefix(of("a1", "b2", "b3", "b4", "b5")), 2);
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".*unique.*")
public void testDuplicateStrings()
{
shortestUniquePrefix(of("aaa", "aaa"));
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".*unique.*")
public void testDuplicateStrings2()
{
shortestUniquePrefix(of("aaa", "aa", "aaa"));
}
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".*unique.*")
public void testDuplicateStrings3()
{
shortestUniquePrefix(of("aa", "aaa", "aa", "aa"));
}
}