/** @file GCObjectConversion.test.cpp * * @author Roland Conybeare, May 2026 **/ #include "GCObjectConversion.hpp" #include #include #include #include #include #include namespace xo { //using xo::scm::ASequence; using xo::scm::ListOps; using xo::scm::DArray; using xo::scm::DList; using xo::scm::DInteger; using xo::scm::GCObjectConversion; using xo::mm::AGCObject; using xo::mm::ArenaConfig; using xo::mm::AAllocator; using xo::mm::DArena; using xo::facet::obj; namespace ut { TEST_CASE("GCObjectConversion-1", "[GCObjectConversion]") { scope log(XO_DEBUG(true), "GCObjectConversion-1"); ArenaConfig cfg { .name_ = "testarena", .size_ = 128 }; DArena arena = DArena::map(cfg); auto mm = obj(&arena); auto v1 = DArray::empty(mm, 3); REQUIRE(v1); REQUIRE(v1->size() == 0); { obj v1_seq = GCObjectConversion>::from_gco(mm /*not used*/, v1); REQUIRE(v1_seq); REQUIRE(v1_seq == v1); REQUIRE(v1_seq->size() == 0); } { obj l1_seq = GCObjectConversion>::from_gco(mm /*not used*/, v1); REQUIRE(!l1_seq); } } TEST_CASE("GCObjectConversion-2", "[GCObjectConversion]") { scope log(XO_DEBUG(true), "GCObjectConversion-2"); ArenaConfig cfg { .name_ = "testarena", .size_ = 128 }; DArena arena = DArena::map(cfg); auto mm = obj(&arena); auto l1 = ListOps::cons(mm, DInteger::box(mm, 42), ListOps::nil()); REQUIRE(l1); REQUIRE(l1->size() == 1); { // will fail; source is DArena obj l1_seq = GCObjectConversion>::from_gco(mm /*not used*/, l1); REQUIRE(l1_seq); } { obj v1_seq = GCObjectConversion>::from_gco(mm /*not used*/, l1); REQUIRE(!v1_seq); } } } /*namespace ut*/ } /*namespace xo*/ /* end GCObjectConversion.cpp */