From d28013210857fcf75cee90f86a79d47bb4d6d6c6 Mon Sep 17 00:00:00 2001 From: bcExpt1123 Date: Tue, 11 Mar 2025 17:09:49 +0000 Subject: [PATCH] Fix comparer and add its unit tests --- pom.xml | 14 +++++ src/main/java/org/alda/common/Comparer.java | 6 +- .../java/org/alda/common/ComparerTest.java | 58 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/alda/common/ComparerTest.java diff --git a/pom.xml b/pom.xml index e822f2a..8a76594 100644 --- a/pom.xml +++ b/pom.xml @@ -14,5 +14,19 @@ UTF-8 org.alda.Main + + + org.junit.jupiter + junit-jupiter-api + 5.10.0 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.10.0 + test + + \ No newline at end of file diff --git a/src/main/java/org/alda/common/Comparer.java b/src/main/java/org/alda/common/Comparer.java index 77fcc6d..3977588 100644 --- a/src/main/java/org/alda/common/Comparer.java +++ b/src/main/java/org/alda/common/Comparer.java @@ -50,13 +50,17 @@ public static Integer compare(T a, T b) { // Compare as Numbers double numA = ((Number) a).doubleValue(); double numB = ((Number) b).doubleValue(); - if (numA >= numB) { + if (numA > numB) { return 1; } else if (numA < numB) { return -1; } return 0; } else { + if(a == null || b == null) { + throw new NullPointerException("Both arguments must be either Strings or Numbers."); + } + throw new IllegalArgumentException("Both arguments must be either Strings or Numbers."); } } diff --git a/src/test/java/org/alda/common/ComparerTest.java b/src/test/java/org/alda/common/ComparerTest.java new file mode 100644 index 0000000..fb27966 --- /dev/null +++ b/src/test/java/org/alda/common/ComparerTest.java @@ -0,0 +1,58 @@ +package org.alda.common; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +/** + * Unit tests for {@link Comparer} class. + */ +class ComparerTest { + + @Test + void testCompareStrings_LexicographicalOrder() { + assertTrue(Comparer.compare("apple", "banana") < 0); + assertTrue(Comparer.compare("banana", "apple") > 0); + assertEquals(0, Comparer.compare("cherry", "cherry")); + } + + @Test + void testCompareNumbers_NumericalOrder() { + System.out.println(Comparer.compare(100, 100)); + assertTrue(Comparer.compare(10, 5) > 0); + assertTrue(Comparer.compare(3.14, 4.2) < 0); + assertEquals(0, Comparer.compare(100, 100)); + } + + @Test + void testCompareMixedNumberTypes() { + assertTrue(Comparer.compare(42, 27.5) > 0); + assertTrue(Comparer.compare(3.14, 3) > 0); + assertTrue(Comparer.compare(2.5f, 3.5) < 0); + } + + @Test + void testCompareWithInvalidTypes() { + Exception exception1 = assertThrows(IllegalArgumentException.class, () -> + Comparer.compare("apple", 42) + ); + assertEquals("Both arguments must be either Strings or Numbers.", exception1.getMessage()); + + Exception exception2 = assertThrows(IllegalArgumentException.class, () -> + Comparer.compare(42, "apple") + ); + assertEquals("Both arguments must be either Strings or Numbers.", exception2.getMessage()); + } + + @Test + void testCompareWithNullValues() { + Exception exception1 = assertThrows(NullPointerException.class, () -> + Comparer.compare(null, "banana") + ); + Exception exception2 = assertThrows(NullPointerException.class, () -> + Comparer.compare(42, null) + ); + Exception exception3 = assertThrows(NullPointerException.class, () -> + Comparer.compare(null, null) + ); + } +}