|
| 1 | +package com.thealgorithms.others; |
| 2 | + |
| 3 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | +import static org.junit.jupiter.api.Assertions.assertFalse; |
| 5 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
| 6 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
| 7 | + |
| 8 | +import org.junit.jupiter.api.Test; |
| 9 | + |
| 10 | +/** |
| 11 | + * Test class for {@link HappyNumbersSeq}. |
| 12 | + * |
| 13 | + * @author Hardvan (https://github.com/Hardvan) |
| 14 | + */ |
| 15 | +class HappyNumbersSeqTest { |
| 16 | + |
| 17 | + @Test |
| 18 | + void testIsHappyWithHappyNumbers() { |
| 19 | + // Test known happy numbers |
| 20 | + assertTrue(HappyNumbersSeq.isHappy(1)); |
| 21 | + assertTrue(HappyNumbersSeq.isHappy(7)); |
| 22 | + assertTrue(HappyNumbersSeq.isHappy(10)); |
| 23 | + assertTrue(HappyNumbersSeq.isHappy(13)); |
| 24 | + assertTrue(HappyNumbersSeq.isHappy(19)); |
| 25 | + assertTrue(HappyNumbersSeq.isHappy(23)); |
| 26 | + assertTrue(HappyNumbersSeq.isHappy(28)); |
| 27 | + assertTrue(HappyNumbersSeq.isHappy(31)); |
| 28 | + assertTrue(HappyNumbersSeq.isHappy(32)); |
| 29 | + assertTrue(HappyNumbersSeq.isHappy(44)); |
| 30 | + assertTrue(HappyNumbersSeq.isHappy(49)); |
| 31 | + assertTrue(HappyNumbersSeq.isHappy(68)); |
| 32 | + assertTrue(HappyNumbersSeq.isHappy(70)); |
| 33 | + assertTrue(HappyNumbersSeq.isHappy(79)); |
| 34 | + assertTrue(HappyNumbersSeq.isHappy(82)); |
| 35 | + assertTrue(HappyNumbersSeq.isHappy(86)); |
| 36 | + assertTrue(HappyNumbersSeq.isHappy(91)); |
| 37 | + assertTrue(HappyNumbersSeq.isHappy(94)); |
| 38 | + assertTrue(HappyNumbersSeq.isHappy(97)); |
| 39 | + assertTrue(HappyNumbersSeq.isHappy(100)); |
| 40 | + } |
| 41 | + |
| 42 | + @Test |
| 43 | + void testIsHappyWithSadNumbers() { |
| 44 | + // Test known sad numbers |
| 45 | + assertFalse(HappyNumbersSeq.isHappy(2)); |
| 46 | + assertFalse(HappyNumbersSeq.isHappy(3)); |
| 47 | + assertFalse(HappyNumbersSeq.isHappy(4)); |
| 48 | + assertFalse(HappyNumbersSeq.isHappy(5)); |
| 49 | + assertFalse(HappyNumbersSeq.isHappy(6)); |
| 50 | + assertFalse(HappyNumbersSeq.isHappy(8)); |
| 51 | + assertFalse(HappyNumbersSeq.isHappy(9)); |
| 52 | + assertFalse(HappyNumbersSeq.isHappy(11)); |
| 53 | + assertFalse(HappyNumbersSeq.isHappy(12)); |
| 54 | + assertFalse(HappyNumbersSeq.isHappy(14)); |
| 55 | + assertFalse(HappyNumbersSeq.isHappy(15)); |
| 56 | + assertFalse(HappyNumbersSeq.isHappy(16)); |
| 57 | + assertFalse(HappyNumbersSeq.isHappy(17)); |
| 58 | + assertFalse(HappyNumbersSeq.isHappy(18)); |
| 59 | + assertFalse(HappyNumbersSeq.isHappy(20)); |
| 60 | + } |
| 61 | + |
| 62 | + @Test |
| 63 | + void testIsHappyWithLargeNumbers() { |
| 64 | + // Test larger happy numbers |
| 65 | + assertTrue(HappyNumbersSeq.isHappy(1000)); |
| 66 | + assertFalse(HappyNumbersSeq.isHappy(999)); |
| 67 | + assertFalse(HappyNumbersSeq.isHappy(1001)); |
| 68 | + } |
| 69 | + |
| 70 | + @Test |
| 71 | + void testIsHappyWithInvalidInput() { |
| 72 | + // Test with zero |
| 73 | + assertThrows(IllegalArgumentException.class, () -> HappyNumbersSeq.isHappy(0)); |
| 74 | + |
| 75 | + // Test with negative numbers |
| 76 | + assertThrows(IllegalArgumentException.class, () -> HappyNumbersSeq.isHappy(-1)); |
| 77 | + assertThrows(IllegalArgumentException.class, () -> HappyNumbersSeq.isHappy(-10)); |
| 78 | + assertThrows(IllegalArgumentException.class, () -> HappyNumbersSeq.isHappy(-100)); |
| 79 | + } |
| 80 | + |
| 81 | + @Test |
| 82 | + void testSumSquaresSingleDigit() { |
| 83 | + assertEquals(0, HappyNumbersSeq.sumSquares(0)); |
| 84 | + assertEquals(1, HappyNumbersSeq.sumSquares(1)); |
| 85 | + assertEquals(4, HappyNumbersSeq.sumSquares(2)); |
| 86 | + assertEquals(9, HappyNumbersSeq.sumSquares(3)); |
| 87 | + assertEquals(16, HappyNumbersSeq.sumSquares(4)); |
| 88 | + assertEquals(25, HappyNumbersSeq.sumSquares(5)); |
| 89 | + assertEquals(36, HappyNumbersSeq.sumSquares(6)); |
| 90 | + assertEquals(49, HappyNumbersSeq.sumSquares(7)); |
| 91 | + assertEquals(64, HappyNumbersSeq.sumSquares(8)); |
| 92 | + assertEquals(81, HappyNumbersSeq.sumSquares(9)); |
| 93 | + } |
| 94 | + |
| 95 | + @Test |
| 96 | + void testSumSquaresMultipleDigits() { |
| 97 | + // 10: 1^2 + 0^2 = 1 |
| 98 | + assertEquals(1, HappyNumbersSeq.sumSquares(10)); |
| 99 | + |
| 100 | + // 23: 2^2 + 3^2 = 4 + 9 = 13 |
| 101 | + assertEquals(13, HappyNumbersSeq.sumSquares(23)); |
| 102 | + |
| 103 | + // 82: 8^2 + 2^2 = 64 + 4 = 68 |
| 104 | + assertEquals(68, HappyNumbersSeq.sumSquares(82)); |
| 105 | + |
| 106 | + // 130: 1^2 + 3^2 + 0^2 = 1 + 9 + 0 = 10 |
| 107 | + assertEquals(10, HappyNumbersSeq.sumSquares(130)); |
| 108 | + |
| 109 | + // 999: 9^2 + 9^2 + 9^2 = 81 + 81 + 81 = 243 |
| 110 | + assertEquals(243, HappyNumbersSeq.sumSquares(999)); |
| 111 | + } |
| 112 | + |
| 113 | + @Test |
| 114 | + void testSumSquaresLargeNumbers() { |
| 115 | + // 1234: 1^2 + 2^2 + 3^2 + 4^2 = 1 + 4 + 9 + 16 = 30 |
| 116 | + assertEquals(30, HappyNumbersSeq.sumSquares(1234)); |
| 117 | + |
| 118 | + // 9876: 9^2 + 8^2 + 7^2 + 6^2 = 81 + 64 + 49 + 36 = 230 |
| 119 | + assertEquals(230, HappyNumbersSeq.sumSquares(9876)); |
| 120 | + } |
| 121 | + |
| 122 | + @Test |
| 123 | + void testIsSadWithCycleNumbers() { |
| 124 | + // Test all known cycle numbers |
| 125 | + assertTrue(HappyNumbersSeq.isSad(4)); |
| 126 | + assertTrue(HappyNumbersSeq.isSad(16)); |
| 127 | + assertTrue(HappyNumbersSeq.isSad(20)); |
| 128 | + assertTrue(HappyNumbersSeq.isSad(37)); |
| 129 | + assertTrue(HappyNumbersSeq.isSad(58)); |
| 130 | + assertTrue(HappyNumbersSeq.isSad(145)); |
| 131 | + } |
| 132 | + |
| 133 | + @Test |
| 134 | + void testIsSadWithNonCycleNumbers() { |
| 135 | + // Test numbers that are not in the cycle |
| 136 | + assertFalse(HappyNumbersSeq.isSad(1)); |
| 137 | + assertFalse(HappyNumbersSeq.isSad(7)); |
| 138 | + assertFalse(HappyNumbersSeq.isSad(10)); |
| 139 | + assertFalse(HappyNumbersSeq.isSad(13)); |
| 140 | + assertFalse(HappyNumbersSeq.isSad(19)); |
| 141 | + assertFalse(HappyNumbersSeq.isSad(23)); |
| 142 | + } |
| 143 | + |
| 144 | + @Test |
| 145 | + void testHappyNumberSequenceFor7() { |
| 146 | + // Test the sequence for happy number 7: 7 → 49 → 97 → 130 → 10 → 1 |
| 147 | + int n = 7; |
| 148 | + assertEquals(49, HappyNumbersSeq.sumSquares(n)); |
| 149 | + n = 49; |
| 150 | + assertEquals(97, HappyNumbersSeq.sumSquares(n)); |
| 151 | + n = 97; |
| 152 | + assertEquals(130, HappyNumbersSeq.sumSquares(n)); |
| 153 | + n = 130; |
| 154 | + assertEquals(10, HappyNumbersSeq.sumSquares(n)); |
| 155 | + n = 10; |
| 156 | + assertEquals(1, HappyNumbersSeq.sumSquares(n)); |
| 157 | + } |
| 158 | + |
| 159 | + @Test |
| 160 | + void testHappyNumberSequenceFor19() { |
| 161 | + // Test the sequence for happy number 19: 19 → 82 → 68 → 100 → 1 |
| 162 | + int n = 19; |
| 163 | + assertEquals(82, HappyNumbersSeq.sumSquares(n)); |
| 164 | + n = 82; |
| 165 | + assertEquals(68, HappyNumbersSeq.sumSquares(n)); |
| 166 | + n = 68; |
| 167 | + assertEquals(100, HappyNumbersSeq.sumSquares(n)); |
| 168 | + n = 100; |
| 169 | + assertEquals(1, HappyNumbersSeq.sumSquares(n)); |
| 170 | + } |
| 171 | + |
| 172 | + @Test |
| 173 | + void testSadNumberEntersCycle() { |
| 174 | + // Test that sad number 2 eventually reaches a cycle number |
| 175 | + int n = 2; |
| 176 | + assertEquals(4, HappyNumbersSeq.sumSquares(n)); // 2 → 4 (cycle number) |
| 177 | + assertTrue(HappyNumbersSeq.isSad(4)); |
| 178 | + } |
| 179 | +} |
0 commit comments