#include "nonogram.h" #include #include #include void printNonogram(const Nonogram& nonogram) { std::cout << "Nonogram: " << nonogram.getWidth() << "x" << nonogram.getHeight() << std::endl; std::cout << "Row hints:" << std::endl; for (size_t i = 0; i < nonogram.getRowCount(); ++i) { const auto& hints = nonogram.getRowHints(i); std::cout << " Row " << i << ":"; for (uint8_t hint : hints) { std::cout << " " << static_cast(hint); } std::cout << std::endl; } std::cout << "Column hints:" << std::endl; for (size_t i = 0; i < nonogram.getColumnCount(); ++i) { const auto& hints = nonogram.getColumnHints(i); std::cout << " Col " << i << ":"; for (uint8_t hint : hints) { std::cout << " " << static_cast(hint); } std::cout << std::endl; } if (nonogram.hasSolution()) { std::cout << "Solution:" << std::endl; for (size_t row = 0; row < nonogram.getHeight(); ++row) { for (size_t col = 0; col < nonogram.getWidth(); ++col) { std::cout << (nonogram.getSolutionCell(row, col) ? "1" : "0"); } std::cout << std::endl; } } } int main() { std::cout << "Testing Nonogram Loader..." << std::endl; // Test loading from file std::string filepath = "/home/connor/repos/nd-wfc/demos/nonogram/data/db/webpbn/1.non"; std::cout << "Attempting to load from: " << filepath << std::endl; std::ifstream test_file(filepath); if (test_file.is_open()) { std::cout << "File exists and can be opened." << std::endl; std::string content((std::istreambuf_iterator(test_file)), std::istreambuf_iterator()); std::cout << "File content length: " << content.length() << std::endl; std::cout << "File content:\n" << content << std::endl; test_file.close(); // Try to load from this content auto nonogram = NonogramLoader::fromString(content); if (nonogram) { std::cout << "Successfully loaded nonogram from file content!" << std::endl; printNonogram(*nonogram); } else { std::cout << "Failed to load nonogram from file content." << std::endl; } } else { std::cout << "Cannot open file!" << std::endl; } auto nonogram = NonogramLoader::fromFile(filepath); if (nonogram) { std::cout << "Successfully loaded nonogram from file!" << std::endl; printNonogram(*nonogram); } else { std::cout << "Failed to load nonogram from file." << std::endl; } std::cout << "\nTesting with sample data..." << std::endl; // Test with sample data std::string sample_data = "width 5\n" "height 10\n" "\n" "rows\n" "2\n" "2,1\n" "1,1\n" "3\n" "1,1\n" "1,1\n" "2\n" "1,1\n" "1,2\n" "2\n" "\n" "columns\n" "2,1\n" "2,1,3\n" "7\n" "1,3\n" "2,1\n" "\n" "goal 01100011010010101110101001010000110010100101111000\n"; auto sample_nonogram = NonogramLoader::fromString(sample_data); if (sample_nonogram) { std::cout << "Successfully loaded nonogram from string!" << std::endl; printNonogram(*sample_nonogram); } else { std::cout << "Failed to load nonogram from string." << std::endl; } // Test loading from directory std::cout << "\nTesting directory loading..." << std::endl; auto puzzles = NonogramLoader::fromDirectory("/home/connor/repos/nd-wfc/demos/nonogram/data/db/webpbn"); std::cout << "Loaded " << puzzles.size() << " puzzles from directory." << std::endl; return 0; }