Add PrefixToInfix.java new algorithm (#5552)

* Add `PrefixToInfix.java` new algorithm

* Update directory

* Fix clang error

* Update directory

* Fix comment

* Add suggested changes

---------

Co-authored-by: Hardvan <Hardvan@users.noreply.github.com>
Co-authored-by: Alex Klymenko <alexanderklmn@gmail.com>
This commit is contained in:
Hardik Pawar
2024-10-04 22:28:52 +05:30
committed by GitHub
parent b61c54797b
commit ea6457bf41
3 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,44 @@
package com.thealgorithms.stacks;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class PrefixToInfixTest {
@ParameterizedTest
@MethodSource("provideValidPrefixToInfixTestCases")
void testValidPrefixToInfixConversion(String prefix, String expectedInfix) {
assertEquals(expectedInfix, PrefixToInfix.getPrefixToInfix(prefix));
}
static Stream<Arguments> provideValidPrefixToInfixTestCases() {
return Stream.of(Arguments.of("A", "A"), // Single operand
Arguments.of("+AB", "(A+B)"), // Addition
Arguments.of("*+ABC", "((A+B)*C)"), // Addition and multiplication
Arguments.of("-+A*BCD", "((A+(B*C))-D)"), // Mixed operators
Arguments.of("/-A*BC+DE", "((A-(B*C))/(D+E))"), // Mixed operators
Arguments.of("^+AB*CD", "((A+B)^(C*D))") // Mixed operators
);
}
@Test
void testEmptyPrefixExpression() {
assertEquals("", PrefixToInfix.getPrefixToInfix(""));
}
@Test
void testNullPrefixExpression() {
assertThrows(NullPointerException.class, () -> PrefixToInfix.getPrefixToInfix(null));
}
@Test
void testMalformedPrefixExpression() {
assertThrows(ArithmeticException.class, () -> PrefixToInfix.getPrefixToInfix("+ABC"));
}
}