Challenge 1 — Solution Task: Write a class StringHelper with a method reverse(string $s): string (using strrev()) and a method isPalindrome(string $s): bool. Write a PHPUnit test class with at least three test methods covering: a normal reverse, a true palindrome case, and a false (non-palindrome) case. ---- src/StringHelper.php ---- reverse($s); } } ---- tests/StringHelperTest.php ---- reverse("hello"); $this->assertEquals("olleh", $result); } public function testIsPalindromeReturnsTrueForPalindrome() { $helper = new StringHelper(); $result = $helper->isPalindrome("racecar"); $this->assertTrue($result); } public function testIsPalindromeReturnsFalseForNonPalindrome() { $helper = new StringHelper(); $result = $helper->isPalindrome("hello"); $this->assertFalse($result); } } Expected test run output: PHPUnit 10.x ... 3 / 3 (100%) OK (3 tests, 3 assertions) Notes: - reverse() is a thin wrapper around PHP's own built-in strrev() function, exactly as the task specified - no custom reversal logic needed. - isPalindrome() reuses reverse() internally rather than duplicating reversal logic, then compares the reversed string against the original with strict equality (===) - a string is a palindrome exactly when it reads the same forwards and backwards. - The three tests deliberately cover three genuinely different code paths: a plain reverse operation, a true palindrome, and a false (non-palindrome) result - assertTrue()/assertFalse() are used specifically since isPalindrome() returns a real boolean, matching the chapter's own guidance on choosing the right assertion for the value being checked.