xo-umbrella2/xo-gc/utest/GCObjectConversion.test.cpp
Roland Conybeare f229baa2e1 git subrepo clone git@github.com:Rconybea/xo-gc.git xo-gc
subrepo:
  subdir:   "xo-gc"
  merged:   "b1898230"
upstream:
  origin:   "git@github.com:Rconybea/xo-gc.git"
  branch:   "main"
  commit:   "b1898230"
git-subrepo:
  version:  "0.4.9"
  origin:   "???"
  commit:   "???"
2026-06-06 22:10:28 -04:00

95 lines
2.5 KiB
C++

/** @file GCObjectConversion.test.cpp
*
* @author Roland Conybeare, May 2026
**/
#include "GCObjectConversion.hpp"
#include <xo/object2/ListOps.hpp>
#include <xo/object2/List.hpp>
#include <xo/object2/Array.hpp>
#include <xo/object2/Integer.hpp>
#include <xo/alloc2/Arena.hpp>
#include <catch2/catch.hpp>
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<AAllocator,DArena>(&arena);
auto v1 = DArray::empty(mm, 3);
REQUIRE(v1);
REQUIRE(v1->size() == 0);
{
obj v1_seq
= GCObjectConversion<obj<AGCObject,DArray>>::from_gco(mm /*not used*/, v1);
REQUIRE(v1_seq);
REQUIRE(v1_seq == v1);
REQUIRE(v1_seq->size() == 0);
}
{
obj l1_seq
= GCObjectConversion<obj<AGCObject,DList>>::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<AAllocator,DArena>(&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<obj<AGCObject,DList>>::from_gco(mm /*not used*/, l1);
REQUIRE(l1_seq);
}
{
obj v1_seq
= GCObjectConversion<obj<AGCObject,DArray>>::from_gco(mm /*not used*/, l1);
REQUIRE(!v1_seq);
}
}
} /*namespace ut*/
} /*namespace xo*/
/* end GCObjectConversion.cpp */