import static org.junit.Assert.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.junit.Test; public class Test2ATester { @Test public void testSize() { List list = new ArrayList(); assertEquals(0, Test2A.size(list)); list.add(""); assertEquals(1, Test2A.size(list)); list.add(""); assertEquals(2, Test2A.size(list)); } @Test public void testFirst() { List list = new ArrayList(); list.add("first"); assertEquals("first", Test2A.first(list)); } @Test(expected=IllegalArgumentException.class) public void testFirstNull() { Test2A.first(null); } @Test(expected=IllegalArgumentException.class) public void testFirstEmpty() { List list = new ArrayList(); Test2A.first(list); } private static List getRandom() { Random random = new Random(System.currentTimeMillis()); final int MAX_SIZE = 100; final int MAX_LENGTH = 25; final int LETTER = 26; List list = new ArrayList(); int size = 1 + random.nextInt(MAX_SIZE); for (int s = 0; s < size; s++) { int length = 1 + random.nextInt(MAX_LENGTH); StringBuffer word = new StringBuffer(); for (int l = 0; l < length; l++) { char letter = (char) ('a' + random.nextInt(LETTER)); word.append(letter); } list.add(word.toString()); } return list; } @Test public void testLengthOfLongestString() { final int TEST = 10; for (int t = 0; t < TEST; t++) { List list = Test2ATester.getRandom(); int length = 0; for (String element : list) { length = Math.max(length, element.length()); } assertEquals(length, Test2A.lengthOfLongestString(list)); } } @Test public void testMax() { final int TEST = 10; for (int t = 0; t < TEST; t++) { List list = Test2ATester.getRandom(); int maxCount = 0; String maxWord = null; for (String word : list) { Map characterCount = new HashMap(); for (int i = 0; i < word.length(); i++) { char letter = word.charAt(i); int count; if (!characterCount.containsKey(letter)) { count = 0; } else { count = characterCount.get(letter); } characterCount.put(letter, count + 1); } int count = 0; for (Character c : characterCount.keySet()) { if (characterCount.get(c) > count) { count = characterCount.get(c); } } if (count > maxCount || (count == maxCount && (maxWord == null || word.compareTo(maxWord) < 0))) { maxCount = count; maxWord = word; } } assertEquals(maxWord, Test2A.max(list)); } } }