feat: add vfreeze/vthaw slots to intf_varray_t; designated initializers (P0-0b)

rtti header already present at rtti-0.0.2 with vfreeze_fn_t, vthaw_fn_t,
retain_fn_t, and the two new slots in intf_varray_t. No header modification
needed.

Convert intf_varray_t compound-literal initializers in zarray.c and kvmgr.c
to designated style with explicit .vfreeze = NULL and .vthaw = NULL slots.
kv.c has no intf_varray_t initializer.

Add test_zarray_cow.c with test_freeze_thaw_slots_exist which verifies the
struct layout has the slots accessible and that they are NULL until P0-2
wires the real implementations. Wire test into meson.build and test.c.

Full clean rebuild confirmed: 27/28 targets linked, no new test failures.
Only the 4 pre-existing failures remain.
This commit is contained in:
Rongsong Shen 2026-05-07 08:54:18 +00:00
parent e0e2f56c81
commit c78f9cf91c
5 changed files with 44 additions and 2 deletions

View file

@ -29,6 +29,7 @@ extern void test_jobobj(void);
extern void test_qobj(void);
extern void test_wobj(void);
extern void test_request(void);
extern void test_zarray_cow(void);
void setUp(void) { return; }
@ -127,6 +128,7 @@ int main(int argc, char* argv[])
TEST(test_wobj);
TEST(test_qobj);
TEST(test_request);
TEST(test_zarray_cow);
return UNITY_END();
}

View file

@ -0,0 +1,35 @@
#include <assert.h>
#include <rtti.h>
#include <stdio.h>
#include <unity/unity.h>
#include "zarray.h"
/* xzarray_type is defined in zarray.c */
extern typeinfo_t xzarray_type;
static void test_freeze_thaw_slots_exist(void)
{
/* After P0-0b, intf_varray_t has vfreeze and vthaw slots.
* They are NULL until P0-2 wires the implementations. */
const intf_varray_t* iface
= (const intf_varray_t*)xzarray_type.interfaces.varray;
TEST_ASSERT_NOT_NULL(iface);
/* Access slots without crash — verifies struct layout has them */
(void)iface->vfreeze;
(void)iface->vthaw;
/* Slots must be NULL until P0-2 wires the real implementations */
TEST_ASSERT_NULL(iface->vfreeze);
TEST_ASSERT_NULL(iface->vthaw);
printf("test_freeze_thaw_slots_exist: PASS\n");
}
void test_zarray_cow(void)
{
printf("\n>> zarray COW interface slot test\n\n");
RUN_TEST(test_freeze_thaw_slots_exist);
}