From 46c896bcd78d31130321562b0659e28230261b8e Mon Sep 17 00:00:00 2001 From: Dylan Date: Sat, 6 Jun 2026 18:05:19 +1200 Subject: feat: Initial commit, json data structure and serializing to json --- test/main.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 test/main.cpp (limited to 'test/main.cpp') diff --git a/test/main.cpp b/test/main.cpp new file mode 100644 index 0000000..9430503 --- /dev/null +++ b/test/main.cpp @@ -0,0 +1,110 @@ +#include + +#include +#include + +using std::cout, std::endl; + +class TestClass { +private: + int id; + // std::string* testData; + +public: + // 1. Default Constructor: Sets initial "empty" state [20, 24] + TestClass() : id(-1)/*, testData(new std::string("default"))*/ { + std::cout << "Default Constructor called" << std::endl; + } + + // 2. Parameterized Constructor: For dependency injection/direct testing [24, 25] + TestClass(int id/*, std::string val*/) : id(id)/*, testData(new std::string(val))*/ { + std::cout << "Parameterized Constructor (id: " << id << ")" << std::endl; + } + + // 3. Copy Constructor (Rule of 5): Deep copies resource [14, 23] + TestClass(const TestClass& other) : id(other.id+1)/*, testData(new std::string(*other.testData))*/ { + std::cout << "Copy Constructor called" << id << std::endl; + } + + // 4. Move Constructor (Rule of 5): Transfers ownership of resource [14, 16] + TestClass(TestClass&& other) noexcept : id(other.id+1)/*, testData(other.testData)*/ { + // other.testData = nullptr; + other.id = -1; + std::cout << "Move Constructor called" << id << std::endl; + } + + // 5. Destructor: Essential for RAII and preventing memory leaks [14, 29] + ~TestClass() { + // delete testData; + std::cout << "Destructor called" << id << std::endl; + } + + // Assignment Operators (Standard Rule of 5) + TestClass& operator=(const TestClass& other) { + if (this == &other) return *this; + // delete testData; + id = other.id + 1; + // testData = new std::string(*other.testData); + std::cout << "Assignment op 1 called" << id << std::endl; + return *this; + } + + TestClass& operator=(TestClass&& other) noexcept { + if (this == &other) return *this; + // delete testData; + id = other.id + 1; + // testData = other.testData; + // other.testData = nullptr; + std::cout << "Assignment op 2 called" << id << std::endl; + return *this; + } + + // Helper for verification [18, 21] + int getId() const { return id; } + // std::string getData() const { return testData ? *testData : "null"; } +}; + + +template <> std::string TehJSON::JSON::serializeData(std::shared_ptr data) +{ + return std::to_string(*static_cast(data.get())); +} +template <> std::string TehJSON::JSON::serializeData(std::shared_ptr data) +{ + return std::to_string(*static_cast(data.get())); +} +template <> std::string TehJSON::JSON::serializeData(std::shared_ptr data) +{ + return "test class"; +} +template <> std::string TehJSON::JSON::serializeData(std::shared_ptr data) +{ + return '"' + *static_cast(data.get()) + '"'; +} + + +int main() +{ + TehJSON::JSON json; + // TestClass test1; + // json["test1"].set(test1); + json["test_string"].set("stringy"); + json["test_int"].set(123); + json["test_float"].set(51.8); + json["test_object"]["test_int"].set(100); + json["test_object"]["test_float"].set(100); + + cout << json.getSerialized() << endl; + + // std::shared_ptr test; + // test = std::make_shared(1); + // test = std::make_shared(2); + // test = std::make_shared(std::string("test")); + // std::string& testRef = *(std::string*)test.get(); + // cout << *(std::string*)test.get() << endl; + // testRef += " test2"; + // cout << *(std::string*)test.get() << endl; + + + cout << "abc" << endl; +} -- cgit v1.2.3