un-inception/tests/unit/test_cpp.cpp
Russell Ballestrini 0b7c6fd08d Add unit tests for all 42 language implementations
Unit tests for extension mapping, signature format, language detection,
argument parsing, file operations, and API constants for:

Systems: C, C++, Rust, Go, Zig, Nim, D, V, Crystal
JVM: Java, Kotlin, Groovy, Clojure
.NET: C#, F#
Functional: Haskell, OCaml, Scheme, Common Lisp, Erlang, Elixir
Scripting: Python, Ruby, JavaScript, TypeScript, Lua, Perl, PHP, Tcl, Bash, AWK, PowerShell
Scientific: Julia, R, Fortran
Legacy/Exotic: COBOL, Prolog, Forth, Raku, Objective-C, Dart

All tests validate internal functions without API calls.
2026-01-05 22:07:13 -05:00

134 lines
4.2 KiB
C++

// Unit tests for un.cpp - tests internal functions without API calls
// Compile: g++ -o test_cpp test_cpp.cpp && ./test_cpp
#include <iostream>
#include <string>
#include <map>
#include <cstring>
int passed = 0;
int failed = 0;
#define TEST(name, expr) do { \
if (expr) { \
std::cout << " ✓ " << name << std::endl; \
passed++; \
} else { \
std::cout << " ✗ " << name << std::endl; \
failed++; \
} \
} while(0)
std::map<std::string, std::string> extMap = {
{".py", "python"}, {".js", "javascript"}, {".ts", "typescript"},
{".rb", "ruby"}, {".go", "go"}, {".rs", "rust"}, {".c", "c"},
{".cpp", "cpp"}, {".java", "java"}, {".kt", "kotlin"}, {".hs", "haskell"}
};
std::string getLanguage(const std::string& ext) {
auto it = extMap.find(ext);
return it != extMap.end() ? it->second : "";
}
std::string getExtension(const std::string& filename) {
size_t dot = filename.rfind('.');
return dot != std::string::npos ? filename.substr(dot) : "";
}
std::string getBasename(const std::string& path) {
size_t slash = path.rfind('/');
return slash != std::string::npos ? path.substr(slash + 1) : path;
}
int main() {
std::cout << "\n=== Extension Mapping Tests ===" << std::endl;
TEST("Python extension maps correctly",
getLanguage(".py") == "python");
TEST("C++ extension maps correctly",
getLanguage(".cpp") == "cpp");
TEST("JavaScript extension maps correctly",
getLanguage(".js") == "javascript");
TEST("Go extension maps correctly",
getLanguage(".go") == "go");
TEST("Rust extension maps correctly",
getLanguage(".rs") == "rust");
std::cout << "\n=== Signature Format Tests ===" << std::endl;
std::string timestamp = "1704067200";
std::string method = "POST";
std::string endpoint = "/execute";
std::string body = "{\"language\":\"python\"}";
std::string message = timestamp + ":" + method + ":" + endpoint + ":" + body;
TEST("Signature format starts with timestamp",
message.substr(0, timestamp.length()) == timestamp);
TEST("Signature format contains :POST:",
message.find(":POST:") != std::string::npos);
TEST("Signature format contains :/execute:",
message.find(":/execute:") != std::string::npos);
std::cout << "\n=== Language Detection Tests ===" << std::endl;
std::string content = "#!/usr/bin/env python3\nprint('hello')";
std::string firstLine = content.substr(0, content.find('\n'));
TEST("Python shebang detection - starts with #!",
firstLine.substr(0, 2) == "#!");
TEST("Python shebang detection - contains python",
firstLine.find("python") != std::string::npos);
std::cout << "\n=== Argument Parsing Tests ===" << std::endl;
std::string arg1 = "DEBUG=1";
size_t eq1 = arg1.find('=');
std::string key1 = arg1.substr(0, eq1);
std::string value1 = arg1.substr(eq1 + 1);
TEST("Parse -e KEY=VALUE format - key",
key1 == "DEBUG");
TEST("Parse -e KEY=VALUE format - value",
value1 == "1");
std::string arg2 = "URL=https://example.com?foo=bar";
size_t eq2 = arg2.find('=');
std::string key2 = arg2.substr(0, eq2);
std::string value2 = arg2.substr(eq2 + 1);
TEST("Parse -e KEY=VALUE with equals in value",
key2 == "URL" && value2 == "https://example.com?foo=bar");
std::cout << "\n=== File Operations Tests ===" << std::endl;
TEST("Extract file basename",
getBasename("/home/user/project/script.cpp") == "script.cpp");
TEST("Extract file extension",
getExtension("/home/user/project/script.cpp") == ".cpp");
std::cout << "\n=== API Constants Tests ===" << std::endl;
std::string apiBase = "https://api.unsandbox.com";
TEST("API base URL starts with https://",
apiBase.substr(0, 8) == "https://");
TEST("API base URL contains unsandbox.com",
apiBase.find("unsandbox.com") != std::string::npos);
std::cout << "\n=== Summary ===" << std::endl;
std::cout << "Passed: " << passed << std::endl;
std::cout << "Failed: " << failed << std::endl;
std::cout << "Total: " << (passed + failed) << std::endl;
return failed > 0 ? 1 : 0;
}