The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Updated submodule for fArgparse [v1.6.0]
- Several workarounds added to enable building with gfortran 13.2. Polymorphic assignment is broken, and must be replaced by
ALLOCATE(obj,source=...)
. But apparently not everywhere? - Add
-check nouninit
for Intel LLVM to work aroundifx
bug.
- Updated CI to remove gcc-9 from macOS11 and add gcc-12
- Fixed cmake issue where target "pfunit-mpi-defines" is defined more than once
- Missing variable declaration in parameterized test case boiler plate code.
- Restored consistent behaviour for file paths between
add_pfunit_ctest
andadd_pfunit_sources
. Now theadd_pfunit_ctest
handles relative filepaths (e.g../path/to/source.pf
) as described in the script documentation.
- Increased size of buffer for reporting real values in asserts. Previous length was not quite enough for some 128 bit values, which resulted in EOR failures during execution.
- Update fArgParse submodule to v1.5.0
- Added IntelLLVM.cmake to support ifx
- Added interface for
@asertEquals
for arrays of strings. Previously only string scalars could be compared. - Added check in pFUnit preprocessor that raises an exception if the module name and filename do not agree unless
@suite
is used to override default assumptions. - Added option to set labels to ctests
- Added changelog enforcer GitHub Action
--verbose option
is now passed through by ctest runner- Converted GitHub CI to use cmake abstract build commands
- Fix for compilers that do not support 128 bit reals
- Fixed build_submodule for old git versions
- Fixed for use with FetchContent
- Fix CMake logic in
add_pfunit_ctest.cmake
forMPIEXEC_EXECUTABLE
. Problem not exposed by common MPI flavors which usempirun
- Fix GitHub CI workflow by pinning to CMake 3.24.3
- Fixes for GNU Make builds
- Update fArgParse submodule to v1.4.2
- Fix
pFUnitParser.py
in cases where there is no module name
- Restore Python2 compatibility in
pFUnitParser.py
script
- Added
PFUNIT::pfunit-mpi-defines
ALIAS target - Added option to
add_pfunit_ctest()
macro to specifyWORKING_DIRECTORY
. This is the directory in which the specified test suite will execute. (Not where it is built).
- Updated GitHub Actions
- Moved to latest versions of "base" actions
- Removed stale code
- Added weekly run to try to keep MPI caches live
- Updated fArgParse submodule
- Corrected CMake logic related to activating F08 support. (#366) Previously only
-DENABLE_MPI_F08=1
would work, but other settings such as-DENABLE_MPI_F08=YES
would not activate F08.
- Corrected CMake logic in previous release. Passed self CI tests but broke CI for other packages that use pFUnit.
- CMake option to use
mpi_f08
interfaces:
option (ENABLE_MPI_F08 "Use the 'mpi_f08' module." NO)
- Updated GitHub Actions
- OSs
- Remove macos-10.15
- Add ubuntu-22.04 and macos-12
- Compilers
- Removed gfortran-8
- Added gfortran-11
- Added gfortran-12 (for ubuntu-22.04)
- OSs
- Updated how
collections
from Python is imported due to change in package
- Corrected (undetected?) failing test that incorrectly spelled its expected exception.
- Implemented small workaround for gfortran-11 for test to check if an array is empty. (Related to previous item.)
- Bug in AssertNotEqual() for integers. A return clause was missing. This bug is ancient - apparentyl this routine is not used often.
- Automated archive of full tar ball
- Fixed unintended dependency on MPI in serial tests using
add_pfunit_ctest
macro
- Fix erroneous library order in PFUNITconfig.cmake.in
- Fix erroneous CMake MPI found logic from 4.2.4
- Fixed MPI find logic issue exposed by CI testing. Was including PFUNIT::pfunit even if MPI was not found
- Incorrect treatment of 128 bit real support for compilers that do not support REAL128.
- Incorrect compile flags for PGI
-
When any tests fail, the driver now invokes Fortran
STOP
instead of FortranERROR STOP
. This suppresses annoying back traces from GFortran. -
Changed
OTHER_SRCS
toOTHER_SOURCES
in PFUNIT.mk. The previous spelling is deprecated, but preserved to keep backwards compatibility. -
Add GitHub Action to automatically generate release tarball
- Fix for OpenMP handling in
PFUNITCmake.cmake
. If you skip OpenMP, it is no longer a dependency - Updated external modules that contain bugfixes.
- Fixed cmake logic that fails on enabling tests if using submodules.
- Allow GFortran to use longer lines. (Impacts some upstream use cases.)
- Changed
OTHER_SRCS
toOTHER_SOURCES
in PFUNIT.mk. The previous spelling is deprecated, but preserved to keep backwards compatibility.
This release fixes a CMake race condition in cmake when multiple ctests are build in parallel in the same direcory.
- race condition in CMake build of multiple ctests in same directory
This release fixes some instability in the build that is related to the switch to using namespaces and exporting targets.
- Improved ability to embed pFUnit in the source tree of other projects.
- pFUnit now uses CMake namespaces. Upstream projects should now link
against
PFUNIT::funit
(orPFUNIT::pfunit
) rather than justfunit
. Users that build test suites using theadd_pfunit_ctest()
macro should not see an impact.
-
The
add_pfunit_ctest()
macro could fail under several not-so-rare circumstances. One way is for CMake to fail to buildOTHER_SOURCES
before the driver as it cannot correctly analyze the indirect FortranUSE PFUNIT_EXTRA_INITIALIZE
statement. The other is when using paralle builds with multiple test suites using Intel and the-save-temps
flag. Here the compiler would overwrite thedriver.i90
in the build directory and produce confusing results.The solution is to use Cmake
configure_file()
to preprocess the driver directly on a per-suite basis. This will allow CMake+FPP to corretly analyze dependencies and avoid reuse ofdriver.i90
.
- Enabled use off
add_subdirectory
and build directory directly. This improves the ability to build pFUnit when embedded within another project instead of building it as a separate project.
- Bug in assert for relatively equal. Incorrect index for location of of first failing element.
- Workaround for WSL issue in driver.
- Flag for position independent code.
There is a ticket opened against Intel Fortran 19.2 which breaks some fHamcrest functionality. A failing test has been added to the test suite. 19.1.3 still has this bug. (I have not checked if earlier compilers also had this problem, but quite possibly they do as fHamcrest is still under development.)
-
Separated tests related to RobustRunner into separate test suite. This is to facilitate CI, as the tests do intermittently fail under CI, though rarely in any development environment used by the main developers.
-
Corrected so that default flags are with aggressive debugging. This had been the default in the past, but was apparently lost for NAG to workaround a compiler bug in an intermediate release. Also corrected the way the flags are managed for Debug vs Release.
-
Added workaround for NAG+cmake+OpenMP. An issue has been filed with kitware https://gitlab.kitware.com/cmake/cmake/-/issues/21280
-
Missing PRESENT checks for arguments in TestMethod. Not sure how these were not being caught - probably related to change mentioned above about skipping debug flags with NAG Fortran.
-
Missing RECURSIVE attribute on function in Every.F90. Not necessary in F2008, but not all compilers have implemented this yet.
-
Problem with FHamcrest
equal_to
where when the expected value is a numeric array and the actual value is any type except a numeric array the test still passes, such as:@assert_that(1, is(equal_to([2, 3, 4])))
passes. -
Problem with FHamcrest tests causing a segment fault when a test fails that involves a complex number.
- Tests for FHamcrest
equal_to
functionality.
- Changed
CMakeLists.txt
for FHamcrest tests to use the newpfunit_add_ctest
cmake macro.
- Added flag that allows GFortran 10.x to compile with argument mismatches
in MPI layer. This apparently is only an issue for some MPI flavors, with
others importing the correct interface variability via
use mpi
.
- Fixed problem under WSL+Gfortran-9 in which -O0 crashed pFUnit self tests.
- Changed internal cmake dependencies so that "make test" will now build tests. The tests and test executables are intentionally EXCLUDE_FROM_OLL which interferes with some canonical ways of driving cmake projects. "make tests" will continue to work as before.
- Compiler workarounds
- Changes in gFTL maps to allow IBM XLF to compile
- Workaround for GFortran regression in 10.1 release
- Submodule updates
- Allow @before without requiring @after
- Fixed support for building shared libraries
- Updated to latest submodules
- Corrected problem with cmake -DSKIP_FHAMCREST
- Command line arguments not working with MPI
- Fixed XML
- Updated to latest external dependencies (bugfix in fArgParse)
- Start using new format for ChangeLog.md
- Fix bug in exported pFUnit.mk file. Was not correctly expanding openmp libraries for projects built with Make.
- Improved pFunit driver to avoid name conflicts with user defined initialize()
- Fix bug in add_pfunit_ctest() macro involving path Only affects using with Intel MPI
- Fix minor bug related to OpenMP propagation
- Fix for #122 (allow add_pfunit_test() with abs path)
- Major correction to README to reflect changes from v3.0
- Expansion of hamcrest capabilities
- Completed TAP listener
- Fixes for self-tests that were failing due to Python-3 support
- various (still incomplete) improvements to the README instructions.
- Added preprocessor support for hamcrest @assert_that
- Corrected issue with absolute paths for add_pfunit_sources()
- Major cleanup of source code and CMake logic.
- Single build now builds both serial and mpi support layers
- Introduced initial hamcrest support
- Improved mechanism for cmake building of test suites.
- Simplified overload process for assertions.
- Fix 3.2.7 broke the NAG 6.0 compiler (internal compiler error). Workaround is to simply not use -C=all during the build for now.
- Bug fix for several issues identified by the latest NAG compiler (6.1). These are mostly related to nostandard usage of TARGET attributes that are unsafe for copyin/copyout. Many thanks to NAG for helping to identify the problems. Note: these bugs are innocuous under most circumstances/compilers.
- Another bug that prevented the compiler version workaround from being handled correctly.
- Bug fix - earlier merge broke unix test for Intel compiler version. This prevented fix in 3.2.2 from being used.
- Fixed mistake in OpenMP introduced during previous bug fix.
- Workaround for ifort 16.0.2 bug with openmp
- Various minor improvements to code:
- Fixed inconsistent names in self tests.
- Introduced "-qopenmp" in find_package for OpenMP
- RemoteProxy now ignores output starting with "DEBUG:" - useful for debugging self tests.
- Trivial bug fix in include/driver.F90. Missed in rush to do release 3.2.1.
- Extension: support test to run on "all available" pes.
- This is primarily aimed to enable testing coarray Fortran procedures CAF does not yet have "teams", so tests must use all images. But MPI users may find it useful as well. Just use "*" instead of a number when specifying NPES. True CAF support should be expected in release 4.0.0.
- Extension: support test case with custom constructor. With this extension was able to create external extensions to the framework that allow testing ESMF grideded components. Contact Tom Clune if you want to have those extensions - did not want to induce an ESMF requirement for pFUnit.
- Improved support for CMake (contributed by Pal Levold)
- packaging
- add_pfunit_test() macro
- Ctests (CMake testing package)
- NOTE: now requires a more recent CMake version.
- Increased max filename length to avoid truncation
- Disabled --verbose command line option (breaks under gcc)
- Cleanup to reduce/eliminate compiler warnings when building.
- There is a regression in NAG 6.1, so NAG users should continue to use 6.0 until a fix or a workaround are found
- PGI 15.7 appears to be working robustly
- some previously necessary workarounds have been removed
- Additional documentation for XML printer
- Improved compliance with JUnit for XML printer
- Bug fix for RemoteProxyTestCase
- CMake workaround for OpenMPI 1.8.8 which otherwise complains about nested MPI programs in self tests.
- Fixed KEEP_ALL option in AssertEqual for zero-length strings. Because "" == " " in Fortran, AssertEqual(""," ",whitespace=KEEP_ALL), which should throw an exception, failed silently for zero-length arrays.
- Fixed the make clean bug in Example code.
- Added time out command line arguments.
- Added PFUNIT_EXTRA_USAGE in include/driver.F90 for suite-wide fixture use.
- Cray workarounds on a separate branch (hope for a release in November).
- PGI 15.1 now supported.
- Asserts over integer arrays now supported. INT32 and INT64 support added.
- Consolidated assertAssociated directives to:
@assertAssociated @assertNotAssociated```
- Added ifndef option to preprocessor directives.
- Fixes: Name length checking, unbalanced allocate, python 3 basestring.
- Corrected lack of PRESENT check on some optional arguments.
- Brought integer array version of assertEqual up to level of other numbers.
- Directives added:
@assertEquivalent(...) @assertEqual(a,b) @assertAssociated(...), @assertUnAssociated(...) @assertAssociatedWith(...), @assertUnAssociatedWith(...)
- Added code to parse brackets in directive arguments, allowing @assertEquivalent([...],[...]). Needed for directives that must parse arguments to construct other calls.
- Extended assertTrue and assertFalse to cover arrays of logical.
- Removed dependency on CPP stringification in the REFLECT macro simplifying build.
- Improved portability of build, fixing problem with OUTPUT_FLAG, i.e. "-o".
- Fixed build problem on NAG, cmake/gmake, and OS X.
- Replaced explicit invocations of python with $(PYTHON), set in GNUmakefile, to aid specification.
- Removed an extraneous allocate (Patch 5).
- Fixed parser bug that was not recognizing user-provided procedures annotated with @before/@after for MPI tests.
- Corrected end-of-run logic in include/driver.F90.
- Minor corrections & simplifications to build process.
- Improved compilation time by refactoring automatically generated code.
- Added compile-time configuration parameter to control maximum rank supported by assertions over arrays, e.g. AssertReal.
- Added "whitespace=IGNORE_DIFFERENCES" and similar options to AssertEqual.
- Design improvement that unfortunately breaks GFortran prior to 4.8.3 and 4.9.0 (main reason for major release)
- Default driver now produces useful return code in serial (and some MPI)
- New assertions for floating point: <, <=, >, >=
- Various improvements to parser