mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
refactor: unified duplicate Anagram classes into a single implementation (#6290)
This commit is contained in:
@@ -13,36 +13,37 @@ public class AnagramsTest {
|
||||
|
||||
private static Stream<AnagramTestCase> anagramTestData() {
|
||||
return Stream.of(new AnagramTestCase("late", "tale", true), new AnagramTestCase("late", "teal", true), new AnagramTestCase("listen", "silent", true), new AnagramTestCase("hello", "olelh", true), new AnagramTestCase("hello", "world", false), new AnagramTestCase("deal", "lead", true),
|
||||
new AnagramTestCase("binary", "brainy", true), new AnagramTestCase("adobe", "abode", true), new AnagramTestCase("cat", "act", true), new AnagramTestCase("cat", "cut", false));
|
||||
new AnagramTestCase("binary", "brainy", true), new AnagramTestCase("adobe", "abode", true), new AnagramTestCase("cat", "act", true), new AnagramTestCase("cat", "cut", false), new AnagramTestCase("Listen", "Silent", true), new AnagramTestCase("Dormitory", "DirtyRoom", true),
|
||||
new AnagramTestCase("Schoolmaster", "TheClassroom", true), new AnagramTestCase("Astronomer", "MoonStarer", true), new AnagramTestCase("Conversation", "VoicesRantOn", true));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("anagramTestData")
|
||||
void testApproach1(AnagramTestCase testCase) {
|
||||
assertEquals(testCase.expected(), Anagrams.approach1(testCase.input1(), testCase.input2()));
|
||||
assertEquals(testCase.expected(), Anagrams.areAnagramsBySorting(testCase.input1(), testCase.input2()));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("anagramTestData")
|
||||
void testApproach2(AnagramTestCase testCase) {
|
||||
assertEquals(testCase.expected(), Anagrams.approach2(testCase.input1(), testCase.input2()));
|
||||
assertEquals(testCase.expected(), Anagrams.areAnagramsByCountingChars(testCase.input1(), testCase.input2()));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("anagramTestData")
|
||||
void testApproach3(AnagramTestCase testCase) {
|
||||
assertEquals(testCase.expected(), Anagrams.approach3(testCase.input1(), testCase.input2()));
|
||||
assertEquals(testCase.expected(), Anagrams.areAnagramsByCountingCharsSingleArray(testCase.input1(), testCase.input2()));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("anagramTestData")
|
||||
void testApproach4(AnagramTestCase testCase) {
|
||||
assertEquals(testCase.expected(), Anagrams.approach4(testCase.input1(), testCase.input2()));
|
||||
assertEquals(testCase.expected(), Anagrams.areAnagramsUsingHashMap(testCase.input1(), testCase.input2()));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("anagramTestData")
|
||||
void testApproach5(AnagramTestCase testCase) {
|
||||
assertEquals(testCase.expected(), Anagrams.approach5(testCase.input1(), testCase.input2()));
|
||||
assertEquals(testCase.expected(), Anagrams.areAnagramsBySingleFreqArray(testCase.input1(), testCase.input2()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
package com.thealgorithms.strings;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class CheckAnagramsTest {
|
||||
private static final String MESSAGE = "Strings must contain only lowercase English letters!";
|
||||
|
||||
// CHECK METHOD isAnagrams()
|
||||
@Test
|
||||
public void testCheckAnagrams() {
|
||||
String testString1 = "STUDY";
|
||||
String testString2 = "DUSTY";
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagrams(testString1, testString2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckFalseAnagrams() {
|
||||
String testString1 = "STUDY";
|
||||
String testString2 = "random";
|
||||
Assertions.assertFalse(CheckAnagrams.isAnagrams(testString1, testString2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckSameWordAnagrams() {
|
||||
String testString1 = "STUDY";
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagrams(testString1, testString1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckDifferentCasesAnagram() {
|
||||
String testString1 = "STUDY";
|
||||
String testString2 = "dusty";
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagrams(testString1, testString2));
|
||||
}
|
||||
|
||||
// CHECK METHOD isAnagramsUnicode()
|
||||
// Below tests work with strings which consist of Unicode symbols & the algorithm is case-sensitive.
|
||||
@Test
|
||||
public void testStringAreValidAnagramsCaseSensitive() {
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagramsUnicode("Silent", "liSten"));
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagramsUnicode("This is a string", "is This a string"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringAreNotAnagramsCaseSensitive() {
|
||||
Assertions.assertFalse(CheckAnagrams.isAnagramsUnicode("Silent", "Listen"));
|
||||
Assertions.assertFalse(CheckAnagrams.isAnagramsUnicode("This is a string", "Is this a string"));
|
||||
}
|
||||
|
||||
// CHECK METHOD isAnagramsOptimised()
|
||||
// Below tests work with strings which consist of only lowercase English letters
|
||||
@Test
|
||||
public void testOptimisedAlgorithmStringsAreValidAnagrams() {
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagramsOptimised("silent", "listen"));
|
||||
Assertions.assertTrue(CheckAnagrams.isAnagramsOptimised("mam", "amm"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptimisedAlgorithmShouldThrowExceptionWhenStringsContainUppercaseLetters() {
|
||||
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> CheckAnagrams.isAnagramsOptimised("Silent", "Listen"));
|
||||
Assertions.assertEquals(exception.getMessage(), MESSAGE);
|
||||
|
||||
exception = assertThrows(IllegalArgumentException.class, () -> Assertions.assertFalse(CheckAnagrams.isAnagramsOptimised("This is a string", "Is this a string")));
|
||||
Assertions.assertEquals(exception.getMessage(), MESSAGE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user