Pantheon/tests/test_build.c

82 lines
2.2 KiB
C

/* SPDX-License-Identifier: AGPL-3.0-or-later */
/* Copyright (C) 2026 David (Corey) Herrera */
/*
* Build sanity test — verifies Pantheon links against Foundry correctly.
*/
#include "lib/test.h"
#include "tensor/tensor.h"
#include "../include/pantheon.h"
/* Test: can create a Foundry tensor */
static void test_foundry_tensor_creation(void) {
int64_t shape[] = {4, 4};
tm_tensor *t = tm_zeros(shape, 2, TM_F32);
ASSERT_NOT_NULL(t);
ASSERT_INT_EQ(2, t->ndim);
ASSERT_INT_EQ(4, (int)t->shape[0]);
ASSERT_INT_EQ(4, (int)t->shape[1]);
ASSERT_INT_EQ(16, (int)t->numel);
tm_free(t);
}
/* Test: can create tensors and do matmul via Foundry */
static void test_foundry_matmul(void) {
int64_t shape_a[] = {2, 3};
int64_t shape_b[] = {3, 4};
tm_tensor *a = tm_ones(shape_a, 2, TM_F32);
tm_tensor *b = tm_ones(shape_b, 2, TM_F32);
ASSERT_NOT_NULL(a);
ASSERT_NOT_NULL(b);
tm_tensor *c = tm_matmul(a, b);
ASSERT_NOT_NULL(c);
ASSERT_INT_EQ(2, c->ndim);
ASSERT_INT_EQ(2, (int)c->shape[0]);
ASSERT_INT_EQ(4, (int)c->shape[1]);
/* ones(2,3) @ ones(3,4) = 3.0 everywhere */
float *data = (float *)c->data;
for (int i = 0; i < 8; i++) {
ASSERT_TRUE(data[i] > 2.99f && data[i] < 3.01f);
}
tm_free(a);
tm_free(b);
tm_free(c);
}
/* Test: Pantheon sampling defaults are sane */
static void test_sampling_defaults(void) {
pn_sampling_params p = pn_sampling_defaults();
ASSERT_TRUE(p.temperature > 0.0f);
ASSERT_TRUE(p.top_p > 0.0f && p.top_p <= 1.0f);
ASSERT_TRUE(p.top_k > 0);
}
/* Test: pn_load returns NULL for non-existent file */
static void test_load_nonexistent(void) {
pn_model *m = pn_load("/nonexistent/model.gguf");
ASSERT_TRUE(m == NULL);
}
/* Test: pn_state_new returns NULL for NULL model */
static void test_state_null_model(void) {
pn_state *s = pn_state_new(NULL);
ASSERT_TRUE(s == NULL);
}
int main(void) {
printf("Pantheon Build Tests\n");
printf("====================\n\n");
RUN_TEST(foundry_tensor_creation);
RUN_TEST(foundry_matmul);
RUN_TEST(sampling_defaults);
RUN_TEST(load_nonexistent);
RUN_TEST(state_null_model);
TEST_REPORT();
return __ft_failed > 0 ? 1 : 0;
}