diff --git a/src/test/java/org/nintynine/problems/AdditionalCoverageTest.java b/src/test/java/org/nintynine/problems/AdditionalCoverageTest.java index 13738fb..b81830f 100644 --- a/src/test/java/org/nintynine/problems/AdditionalCoverageTest.java +++ b/src/test/java/org/nintynine/problems/AdditionalCoverageTest.java @@ -75,4 +75,40 @@ void testPrimeTotientResultToString() { MathP34.PrimeTotientResult res2 = new MathP34.PrimeTotientResult(false, 8); assertEquals("Number is not prime, \u03c6(m) = 8", res2.toString()); } + + @Test + @DisplayName("TruthP55.Node string and hash code") + void testTruthP55NodeToStringHash() { + TruthP55.Node left1 = new TruthP55.Node("X", null, null); + TruthP55.Node right1 = new TruthP55.Node("X", null, null); + TruthP55.Node root1 = new TruthP55.Node("X", left1, right1); + + TruthP55.Node left2 = new TruthP55.Node("X", null, null); + TruthP55.Node right2 = new TruthP55.Node("X", null, null); + TruthP55.Node root2 = new TruthP55.Node("X", left2, right2); + + assertEquals("(X (X NIL NIL) (X NIL NIL))", root1.toString()); + assertEquals(root1.toString(), root2.toString()); + assertEquals(root1.hashCode(), root2.hashCode()); + assertTrue(root1.equals(root1)); + assertFalse(root1.equals("X")); + } + + @Test + @DisplayName("GoldbachPair isValid handles invalid pairs") + void testGoldbachPairInvalid() { + MathP40.GoldbachPair invalid = new MathP40.GoldbachPair(4, 6); + assertFalse(invalid.isValid()); + } + + @Test + @DisplayName("HuffmanDecoder detects incomplete codes") + void testDecoderIncomplete() { + List codes = + List.of(new MathP50.HuffmanCode("a", "0"), new MathP50.HuffmanCode("b", "10")); + MathP50.HuffmanDecoder decoder = MathP50.createDecoder(codes); + + assertThrows(IllegalArgumentException.class, () -> decoder.decode("1")); + assertEquals("b", decoder.decode("10")); + } }