meta: re-organise tests

This commit is contained in:
2026-05-04 16:37:06 +01:00
parent 716b939d4f
commit 18c9d30c60
40 changed files with 161 additions and 25 deletions
+5 -3
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.25)
project(fx C)
project(fx C ASM)
include (TestBigEndian)
@@ -35,8 +35,10 @@ message(STATUS "Floating point support: ${fx_enable_floating_point}")
set(fx_system_name ${CMAKE_SYSTEM_NAME})
string(TOLOWER ${fx_system_name} fx_system_name)
set(fx_system_arch ${CMAKE_SYSTEM_PROCESSOR})
string(TOLOWER ${fx_system_arch} fx_system_arch)
message(STATUS "System name: ${fx_system_name}")
message(STATUS "Target system: ${fx_system_name}-${fx_system_arch}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
@@ -48,4 +50,4 @@ foreach (assembly ${fx_assemblies})
add_subdirectory(assemblies/${assembly})
endforeach (assembly)
add_executable(dynamic-test test/dynamic-test.c)
add_subdirectory(test)
+9 -2
View File
@@ -80,7 +80,10 @@ macro(export_fx_namespace_details ns_name)
file(GLOB sys_sources
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/*.c
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/*.h)
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/*.h
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/${fx_system_arch}/*.c
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/${fx_system_arch}/*.h
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/${fx_system_arch}/*.S)
file(GLOB headers include/${namespace_path}/*.h)
set(namespace_sources
${namespace_sources}
@@ -89,8 +92,12 @@ macro(export_fx_namespace_details ns_name)
${sys_sources}
${headers}
PARENT_SCOPE)
set(internal_include_dirs
${internal_include_dirs}
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/include
${CMAKE_CURRENT_SOURCE_DIR}/sys/${fx_system_name}/${fx_system_arch}/include
PARENT_SCOPE)
set(internal_libs ${internal_libs} PARENT_SCOPE)
set(internal_include_dirs ${internal_include_dirs} PARENT_SCOPE)
set(internal_defines ${internal_defines} PARENT_SCOPE)
endmacro(export_fx_namespace_details)
View File
+7
View File
@@ -0,0 +1,7 @@
file(GLOB test_sources *.c)
foreach (f ${test_sources})
get_filename_component(test_name ${f} NAME_WLE)
add_executable(${test_name} ${f})
target_link_libraries(${test_name} ${fx_assemblies})
endforeach (f)
+22
View File
@@ -0,0 +1,22 @@
#include <dlfcn.h>
#include <stdio.h>
int main(int argc, const char **argv)
{
printf("dynamic loader\n");
void *assembly = dlopen(argv[1], RTLD_LAZY);
if (!assembly) {
printf("cannot load %s\n", argv[1]);
return -1;
}
const void *(*asm_info)(void) = dlsym(assembly, "__fx_assembly_get");
if (!asm_info) {
printf("cannot find assembly info for %s", argv[1]);
return -1;
}
asm_info();
printf("OK\n");
return 0;
}
+3 -3
View File
@@ -1,8 +1,8 @@
#include <fx/core/stream.h>
#include <fx/core/stringstream.h>
#include <fx/ds/string.h>
#include <fx/io/file.h>
#include <fx/io/path.h>
#include <fx/stream.h>
#include <fx/string.h>
#include <fx/stringstream.h>
#include <stdio.h>
int main(int argc, const char **argv)
+3 -3
View File
@@ -1,8 +1,8 @@
#include <fx/core/stream.h>
#include <fx/core/stringstream.h>
#include <fx/ds/string.h>
#include <fx/io/file.h>
#include <fx/io/path.h>
#include <fx/stream.h>
#include <fx/string.h>
#include <fx/stringstream.h>
#include <stdio.h>
int main(int argc, const char **argv)
+30
View File
@@ -0,0 +1,30 @@
#include <fx/reflection/function.h>
#include <fx/value.h>
#include <inttypes.h>
#include <stdio.h>
int main(int argc, const char **argv)
{
fx_value_type arg_types[] = {
FX_VALUE_TYPE_CSTR,
};
fx_function *func = fx_function_create(
"test_function",
FX_FUNCTION_F_VARARG,
(fx_function_impl)printf,
arg_types,
1,
FX_VALUE_TYPE_INT);
fx_value args[] = {
FX_VALUE_CSTR("Hello %s! You are number %lf\n"),
FX_VALUE_CSTR("Jonh"),
FX_VALUE_DOUBLE(2.5),
};
fx_value result = FX_VALUE_EMPTY;
int r = fx_function_invoke(func, args, 3, &result);
printf("%" PRIdPTR "\n", result.v_int);
return 0;
}
+42 -14
View File
@@ -1,22 +1,50 @@
#include <dlfcn.h>
#include <fx/reflection/function.h>
#include <fx/value.h>
#include <stdio.h>
static double test_function(int a, double b, int c, ...)
{
#if 1
va_list args;
va_start(args, c);
int d = va_arg(args, int);
double e = va_arg(args, double);
int f = va_arg(args, int);
printf("a=%d, b=%lf, c=%d, d=%d, e=%lf, f=%d\n", a, b, c, d, e, f);
return (a + b + c + d + e + f) + 0.5;
#else
printf("a=%d, b=%lf, c=%d\n", a, b, c);
return 32;
#endif
}
int main(int argc, const char **argv)
{
printf("dynamic loader\n");
void *assembly = dlopen(argv[1], RTLD_LAZY);
if (!assembly) {
printf("cannot load %s\n", argv[1]);
return -1;
}
fx_value_type arg_types[] = {
FX_VALUE_TYPE_INT,
FX_VALUE_TYPE_DOUBLE,
FX_VALUE_TYPE_INT,
};
const void *(*asm_info)(void) = dlsym(assembly, "__fx_assembly_get");
if (!asm_info) {
printf("cannot find assembly info for %s", argv[1]);
return -1;
}
fx_function *func = fx_function_create(
"test_function",
FX_FUNCTION_F_VARARG,
(fx_function_impl)test_function,
arg_types,
3,
FX_VALUE_TYPE_DOUBLE);
asm_info();
printf("OK\n");
fx_value args[] = {
FX_VALUE_INT(1),
FX_VALUE_DOUBLE(2.5),
FX_VALUE_INT(3),
FX_VALUE_INT(4),
FX_VALUE_DOUBLE(5.5),
FX_VALUE_INT(6),
};
fx_value result = FX_VALUE_EMPTY;
int r = fx_function_invoke(func, args, 6, &result);
printf("%lf\n", result.v_double);
return 0;
}
+40
View File
@@ -0,0 +1,40 @@
#include <stdarg.h>
#include <stdio.h>
static double another_function(int a, double b, int c)
{
printf("a=%d, b=%lf, c=%d\n", a, b, c);
return 1.2;
}
static int test_function(int a, int b, int c, ...)
{
va_list args;
va_start(args, c);
int d = va_arg(args, int);
int e = va_arg(args, int);
int f = va_arg(args, int);
int g = va_arg(args, int);
int h = va_arg(args, int);
int i = va_arg(args, int);
int j = va_arg(args, int);
printf("a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n",
a,
b,
c,
d,
e,
f,
g,
h,
i,
j);
return a + b + c + d + e;
}
int main(void)
{
test_function(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
another_function(1, 2.5, 5);
return 0;
}