shouldInvert($row, $col); $expected = ($mod === 0); $match = $shouldInvert === $expected ? "✅" : "❌"; echo sprintf( " (%2d,%2d): sum=%2d, mod=%d, shouldInvert=%s, expected=%s %s\n", $row, $col, $sum, $mod, $shouldInvert ? 'true ' : 'false', $expected ? 'true ' : 'false', $match ); } echo "\n"; // Test actual mask application echo "Testing actual mask application on a small matrix:\n"; $matrix = new QrCodeMatrix(5); // Set all modules to light initially for ($r = 0; $r < 5; $r++) { for ($c = 0; $c < 5; $c++) { $matrix = $matrix->setModuleAt($r, $c, Module::light()); } } // Now apply mask to check which modules get inverted for ($r = 0; $r < 5; $r++) { for ($c = 0; $c < 5; $c++) { if ($pattern->shouldInvert($r, $c)) { $matrix = $matrix->setModuleAt($r, $c, Module::dark()); } } } // Display result echo "Mask pattern (1 = inverted, 0 = not inverted):\n"; for ($r = 0; $r < 5; $r++) { echo " "; for ($c = 0; $c < 5; $c++) { echo $matrix->getModuleAt($r, $c)->isDark() ? '1' : '0'; } echo "\n"; } echo "\nExpected pattern:\n"; echo " 10010\n"; echo " 01001\n"; echo " 00100\n"; echo " 10010\n"; echo " 01001\n";