diff --git a/codegen/src/targets/native.rs b/codegen/src/targets/native.rs index b08b401..a6fd86b 100644 --- a/codegen/src/targets/native.rs +++ b/codegen/src/targets/native.rs @@ -826,7 +826,9 @@ fn module_test(slug: &str, functions: &[&CompiledFunction]) -> Result { .iter() .any(|function| matches!(function.core.output, Output::Struct(_))); let mut writer = Writer::new(); - writer.write(format_args!("{HEADER}\n\n#ifdef IMPORT_UMBRELLA\nimport ptfkit;\n#else\nimport ptfkit.{slug};\n#endif\n\n#include \"support/close_enough.h\"")); + writer.write(format_args!( + "{HEADER}\n\nimport ptfkit.{slug};\n\n#include \"support/close_enough.h\"" + )); if type_traits { writer.write("\n#include \n\n"); } else { diff --git a/docs/src/contributing/development.md b/docs/src/contributing/development.md index 42c884c..fa97085 100644 --- a/docs/src/contributing/development.md +++ b/docs/src/contributing/development.md @@ -131,6 +131,13 @@ These files have no generated-file marker and are not codegen outputs. Edit them directly when changing test infrastructure, then run the target verification suites. Keep the shared comparison policy consistent across targets. +The handwritten native tests `tests/support/umbrella.c` and +`tests/support/umbrella.cpp` check function and result-type access through +`` and `import ptfkit`, respectively. The C test is compiled as +both C11 and C++23 and checks that all public headers can be included together. +Generated verification tests use individual source headers or modules without +repeating the suite through the umbrella. + ### Adding a PTF The assisted workflow uses the skills in `.agents/skills/`: diff --git a/targets/ptfkit-native/tests/CMakeLists.txt b/targets/ptfkit-native/tests/CMakeLists.txt index d687c51..097eb08 100644 --- a/targets/ptfkit-native/tests/CMakeLists.txt +++ b/targets/ptfkit-native/tests/CMakeLists.txt @@ -3,16 +3,13 @@ function(ptfkit_add_native_tests case) PARSE_ARGV 1 arg "" "" - "SOURCES;LIBRARIES;DEFINITIONS;PROPERTIES;COMPILE_FEATURES" + "SOURCES;LIBRARIES;PROPERTIES;COMPILE_FEATURES" ) foreach(source ${arg_SOURCES}) get_filename_component(name ${source} NAME_WE) set(target ${case}_${name}) add_executable(${target} ${source}) target_link_libraries(${target} PRIVATE ${arg_LIBRARIES}) - if(arg_DEFINITIONS) - target_compile_definitions(${target} PRIVATE ${arg_DEFINITIONS}) - endif() if(arg_PROPERTIES) set_target_properties(${target} PROPERTIES ${arg_PROPERTIES}) endif() diff --git a/targets/ptfkit-native/tests/c/CMakeLists.txt b/targets/ptfkit-native/tests/c/CMakeLists.txt index 2011601..8e89eba 100644 --- a/targets/ptfkit-native/tests/c/CMakeLists.txt +++ b/targets/ptfkit-native/tests/c/CMakeLists.txt @@ -1,8 +1,12 @@ file(GLOB sources CONFIGURE_DEPENDS *.c) ptfkit_add_native_tests(c - SOURCES ${sources} + SOURCES ${sources} ../support/umbrella.c LIBRARIES ptfkit::c ) +set_target_properties(c_umbrella PROPERTIES + C_STANDARD 11 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF +) + ptfkit_add_comparator_test(C c_comparator) diff --git a/targets/ptfkit-native/tests/cpp/CMakeLists.txt b/targets/ptfkit-native/tests/cpp/CMakeLists.txt index cdd1e23..69829e5 100644 --- a/targets/ptfkit-native/tests/cpp/CMakeLists.txt +++ b/targets/ptfkit-native/tests/cpp/CMakeLists.txt @@ -1,16 +1,8 @@ file(GLOB sources CONFIGURE_DEPENDS *.cpp) ptfkit_add_native_tests(cpp - SOURCES ${sources} + SOURCES ${sources} ../support/umbrella.cpp LIBRARIES ptfkit::cpp PROPERTIES CXX_SCAN_FOR_MODULES ON ) - -ptfkit_add_native_tests(cpp_umbrella - SOURCES ${sources} - LIBRARIES ptfkit::cpp - DEFINITIONS IMPORT_UMBRELLA - PROPERTIES - CXX_SCAN_FOR_MODULES ON -) diff --git a/targets/ptfkit-native/tests/cpp/ahuja1984.cpp b/targets/ptfkit-native/tests/cpp/ahuja1984.cpp index 9465f67..1a85255 100644 --- a/targets/ptfkit-native/tests/cpp/ahuja1984.cpp +++ b/targets/ptfkit-native/tests/cpp/ahuja1984.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.ahuja1984; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/aimrun2009.cpp b/targets/ptfkit-native/tests/cpp/aimrun2009.cpp index 01362b4..604ee13 100644 --- a/targets/ptfkit-native/tests/cpp/aimrun2009.cpp +++ b/targets/ptfkit-native/tests/cpp/aimrun2009.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.aimrun2009; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/beniaich2023.cpp b/targets/ptfkit-native/tests/cpp/beniaich2023.cpp index 7dfe7a6..93219ca 100644 --- a/targets/ptfkit-native/tests/cpp/beniaich2023.cpp +++ b/targets/ptfkit-native/tests/cpp/beniaich2023.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.beniaich2023; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/chakraborty2011.cpp b/targets/ptfkit-native/tests/cpp/chakraborty2011.cpp index b027703..a980595 100644 --- a/targets/ptfkit-native/tests/cpp/chakraborty2011.cpp +++ b/targets/ptfkit-native/tests/cpp/chakraborty2011.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.chakraborty2011; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/clapp1978.cpp b/targets/ptfkit-native/tests/cpp/clapp1978.cpp index af6f2af..31034ab 100644 --- a/targets/ptfkit-native/tests/cpp/clapp1978.cpp +++ b/targets/ptfkit-native/tests/cpp/clapp1978.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.clapp1978; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/cosby1984.cpp b/targets/ptfkit-native/tests/cpp/cosby1984.cpp index e6949f4..612c69e 100644 --- a/targets/ptfkit-native/tests/cpp/cosby1984.cpp +++ b/targets/ptfkit-native/tests/cpp/cosby1984.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.cosby1984; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/dharumarajan2019.cpp b/targets/ptfkit-native/tests/cpp/dharumarajan2019.cpp index 0290f16..8ad0618 100644 --- a/targets/ptfkit-native/tests/cpp/dharumarajan2019.cpp +++ b/targets/ptfkit-native/tests/cpp/dharumarajan2019.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.dharumarajan2019; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/dijkerman1988.cpp b/targets/ptfkit-native/tests/cpp/dijkerman1988.cpp index 03d5af0..4467f04 100644 --- a/targets/ptfkit-native/tests/cpp/dijkerman1988.cpp +++ b/targets/ptfkit-native/tests/cpp/dijkerman1988.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.dijkerman1988; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/ferrerjulia2004.cpp b/targets/ptfkit-native/tests/cpp/ferrerjulia2004.cpp index fcc1539..a0f8176 100644 --- a/targets/ptfkit-native/tests/cpp/ferrerjulia2004.cpp +++ b/targets/ptfkit-native/tests/cpp/ferrerjulia2004.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.ferrerjulia2004; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/gunarathna2019.cpp b/targets/ptfkit-native/tests/cpp/gunarathna2019.cpp index 092daa2..952f489 100644 --- a/targets/ptfkit-native/tests/cpp/gunarathna2019.cpp +++ b/targets/ptfkit-native/tests/cpp/gunarathna2019.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.gunarathna2019; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/hodnett2002.cpp b/targets/ptfkit-native/tests/cpp/hodnett2002.cpp index 06dfa8f..f66c05b 100644 --- a/targets/ptfkit-native/tests/cpp/hodnett2002.cpp +++ b/targets/ptfkit-native/tests/cpp/hodnett2002.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.hodnett2002; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/jabro1992.cpp b/targets/ptfkit-native/tests/cpp/jabro1992.cpp index 3a1cba7..38e351a 100644 --- a/targets/ptfkit-native/tests/cpp/jabro1992.cpp +++ b/targets/ptfkit-native/tests/cpp/jabro1992.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.jabro1992; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/lal1979.cpp b/targets/ptfkit-native/tests/cpp/lal1979.cpp index 37a2f1c..f9134ed 100644 --- a/targets/ptfkit-native/tests/cpp/lal1979.cpp +++ b/targets/ptfkit-native/tests/cpp/lal1979.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.lal1979; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/li2007.cpp b/targets/ptfkit-native/tests/cpp/li2007.cpp index 957701b..f4c2d1a 100644 --- a/targets/ptfkit-native/tests/cpp/li2007.cpp +++ b/targets/ptfkit-native/tests/cpp/li2007.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.li2007; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/mayr1999.cpp b/targets/ptfkit-native/tests/cpp/mayr1999.cpp index a8dc624..7caef16 100644 --- a/targets/ptfkit-native/tests/cpp/mayr1999.cpp +++ b/targets/ptfkit-native/tests/cpp/mayr1999.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.mayr1999; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/oosterveld1980.cpp b/targets/ptfkit-native/tests/cpp/oosterveld1980.cpp index 41475ec..8bb44c2 100644 --- a/targets/ptfkit-native/tests/cpp/oosterveld1980.cpp +++ b/targets/ptfkit-native/tests/cpp/oosterveld1980.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.oosterveld1980; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/pidgeon1972.cpp b/targets/ptfkit-native/tests/cpp/pidgeon1972.cpp index c66ab99..821e734 100644 --- a/targets/ptfkit-native/tests/cpp/pidgeon1972.cpp +++ b/targets/ptfkit-native/tests/cpp/pidgeon1972.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.pidgeon1972; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp/puckett1985.cpp b/targets/ptfkit-native/tests/cpp/puckett1985.cpp index bf4173b..ac6bfd4 100644 --- a/targets/ptfkit-native/tests/cpp/puckett1985.cpp +++ b/targets/ptfkit-native/tests/cpp/puckett1985.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.puckett1985; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/rawls1982.cpp b/targets/ptfkit-native/tests/cpp/rawls1982.cpp index 86b6222..cf684df 100644 --- a/targets/ptfkit-native/tests/cpp/rawls1982.cpp +++ b/targets/ptfkit-native/tests/cpp/rawls1982.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.rawls1982; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/saxton2006.cpp b/targets/ptfkit-native/tests/cpp/saxton2006.cpp index 1d02e3d..dc0d405 100644 --- a/targets/ptfkit-native/tests/cpp/saxton2006.cpp +++ b/targets/ptfkit-native/tests/cpp/saxton2006.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.saxton2006; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/tiwary2014.cpp b/targets/ptfkit-native/tests/cpp/tiwary2014.cpp index 2e8b147..bc722ef 100644 --- a/targets/ptfkit-native/tests/cpp/tiwary2014.cpp +++ b/targets/ptfkit-native/tests/cpp/tiwary2014.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.tiwary2014; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/varallyai1982.cpp b/targets/ptfkit-native/tests/cpp/varallyai1982.cpp index 112627a..6ccf835 100644 --- a/targets/ptfkit-native/tests/cpp/varallyai1982.cpp +++ b/targets/ptfkit-native/tests/cpp/varallyai1982.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.varallyai1982; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/vereecken1989.cpp b/targets/ptfkit-native/tests/cpp/vereecken1989.cpp index 37e0104..1af525f 100644 --- a/targets/ptfkit-native/tests/cpp/vereecken1989.cpp +++ b/targets/ptfkit-native/tests/cpp/vereecken1989.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.vereecken1989; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/wang2012.cpp b/targets/ptfkit-native/tests/cpp/wang2012.cpp index b8f3586..2089a54 100644 --- a/targets/ptfkit-native/tests/cpp/wang2012.cpp +++ b/targets/ptfkit-native/tests/cpp/wang2012.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.wang2012; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/weber2020.cpp b/targets/ptfkit-native/tests/cpp/weber2020.cpp index 5adec18..71a84f9 100644 --- a/targets/ptfkit-native/tests/cpp/weber2020.cpp +++ b/targets/ptfkit-native/tests/cpp/weber2020.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.weber2020; -#endif #include "support/close_enough.h" #include diff --git a/targets/ptfkit-native/tests/cpp/zhao2016.cpp b/targets/ptfkit-native/tests/cpp/zhao2016.cpp index 975aa29..1375ad5 100644 --- a/targets/ptfkit-native/tests/cpp/zhao2016.cpp +++ b/targets/ptfkit-native/tests/cpp/zhao2016.cpp @@ -1,10 +1,6 @@ /* @generated by ptfkit-codegen; DO NOT EDIT. */ -#ifdef IMPORT_UMBRELLA -import ptfkit; -#else import ptfkit.zhao2016; -#endif #include "support/close_enough.h" diff --git a/targets/ptfkit-native/tests/cpp_fallback/CMakeLists.txt b/targets/ptfkit-native/tests/cpp_fallback/CMakeLists.txt index 2114835..fcf54db 100644 --- a/targets/ptfkit-native/tests/cpp_fallback/CMakeLists.txt +++ b/targets/ptfkit-native/tests/cpp_fallback/CMakeLists.txt @@ -1,4 +1,5 @@ file(GLOB sources CONFIGURE_DEPENDS ../c/*.c) +list(APPEND sources "${CMAKE_CURRENT_SOURCE_DIR}/../support/umbrella.c") set_source_files_properties( ${sources} @@ -12,3 +13,7 @@ ptfkit_add_native_tests(cpp_fallback ) ptfkit_add_comparator_test(CXX cpp_comparator) + +set_target_properties(cpp_fallback_umbrella PROPERTIES + CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF +) diff --git a/targets/ptfkit-native/tests/support/umbrella.c b/targets/ptfkit-native/tests/support/umbrella.c new file mode 100644 index 0000000..13b7077 --- /dev/null +++ b/targets/ptfkit-native/tests/support/umbrella.c @@ -0,0 +1,11 @@ +#include + +#include "close_enough.h" + +int main(void) { + const saxton2006_ptf_result result = calc_ptf_saxton2006(0.88, 0.05, 2.5); + // Expected value from specs/functions/saxton2006.yaml, table_3_sand. + assert_close(result.theta_1500, 0.05022058, 0.001, 0.0, "volumetric_water_content", + "volume_fraction", "registry", "table_3_sand"); + return 0; +} diff --git a/targets/ptfkit-native/tests/support/umbrella.cpp b/targets/ptfkit-native/tests/support/umbrella.cpp new file mode 100644 index 0000000..db4ec20 --- /dev/null +++ b/targets/ptfkit-native/tests/support/umbrella.cpp @@ -0,0 +1,12 @@ +import ptfkit; + +#include "close_enough.h" + +int main() { + const ptfkit::saxton2006::Saxton2006PTFResult result = + ptfkit::saxton2006::calc_ptf_saxton2006(0.88, 0.05, 2.5); + // Expected value from specs/functions/saxton2006.yaml, table_3_sand. + assert_close(result.theta_1500, 0.05022058, 0.001, 0.0, "volumetric_water_content", + "volume_fraction", "registry", "table_3_sand"); + return 0; +}