Skip to content

JHenneberg/fortran-unit-test

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fortran Unit Test Library FUT

Content

Overview

This is a Fortran Unit Test library purely written in Fortran to encourage scientific programmer to write tests.

Go to Top

Installation

A CMake-Setup is provided.

Go to Top

Example

demo.F90:

program good_test

  use unit_test

  implicit none

  type(test_suite_type) :: specific_suite

  ! example with default suite
  call test_suite_init()
  call test_case_create('Test 1')

  ! By sending macros __FILE__ and __LINE__, report will print the file and line number where assertion fails.
  call assert_approximate(1.0, 2.0, __FILE__, __LINE__) ! line 14

  ! report the complete suite
  call test_suite_report()

  ! finalize
  call test_case_final()

  ! example with specific suite
  call test_suite_init('my specific test suite', specific_suite)
  call test_case_create('Specific Test 1', specific_suite)
  ! suite = SUITE need in this case (cause optional argument eps, file_name, line_number is missing)
  call assert_approximate(1.0, 2.0, suite=specific_suite)

  call test_case_create('Specific Test 2', specific_suite)
  ! suite = SUITE need in this case (cause optional argument eps is missing)
  call assert_equal(1.0, 2.0, __FILE__, __LINE__,  suite=specific_suite)

  call test_case_create('Specific Test 3', specific_suite)
  call assert_approximate(1.0, 2.0, __FILE__, __LINE__, 1E-0, specific_suite)

  ! report a test_case
  call test_case_report('Specific Test 2', specific_suite)

  ! report the complete suite
  call test_suite_report(specific_suite)

  ! finalize
  call test_suite_final(specific_suite)

end program good_test

Output:

///////////////////// Report of Suite: Default test suite ///////////////////////

 +-> Details:
 |   |
 |   +-> Test 1: 1 of 1 assertions succeed.
 |   |
 |
 +-> Summary:
 |   +-> Default test suite: 1 of 1 assertions succeed.

////////////////////////////////////////////////////////////////////////////////


//////// Report of Suite: my specific test suite, Case: Specific Test 2 /////////

 +-> Specific Test 2: 0 of 1 assertions succeed.
 |   |
 |   +-> Assertion #1 failed with reason: x ( 1.000) == y ( 2.000)
 |   +-> Check line: test_assert.F90:29

/////////////////// Report of Suite: my specific test suite /////////////////////

 +-> Details:
 |   |
 |   +-> Specific Test 1: 1 of 1 assertions succeed.
 |   |
 |   +-> Specific Test 2: 0 of 1 assertions succeed.
 |   |   |
 |   |   +-> Assertion #1 failed with reason: x ( 1.000) == y ( 2.000)
 |   |   +-> Check line: test_assert.F90:29
 |   |
 |   +-> Specific Test 3: 0 of 1 assertions succeed.
 |   |   |
 |   |   +-> Assertion #1 failed with reason: x ( 1.000) =~ y ( 2.000)
 |   |   +-> Check line: test_assert.F90:32
 |   |
 |
 +-> Summary:
 |   +-> my specific test suite: 1 of 3 assertions succeed.

////////////////////////////////////////////////////////////////////////////////

You can integrate this library into your CMake based project as:

...
add_subdirectory (<fortran-unit-test root>)
include_directories (${UNIT_TEST_INCLUDE_DIR})
...
target_link_libraries (<user target> fortran_unit_test ...)

Go to Top

Supported Data Types

  • assert_equal()
    • single data type
      • integer(1);
      • integer(2);
      • integer(4);
      • integer(8);
      • real(4);
      • real(8);
      • character(*);
    • vector data type
      • integer(1), dimension(:);
      • integer(2), dimension(:);
      • integer(4), dimension(:);
      • integer(8), dimension(:);
      • real(4), dimension(:);
      • real(8), dimension(:);
      • character(*), dimension(:);
    • array data type
      • integer(1), dimension(:, :);
      • integer(2), dimension(:, :);
      • integer(4), dimension(:, :);
      • integer(8), dimension(:, :);
      • real(4), dimension(:, :);
      • real(8), dimension(:, :);
      • character(*), dimension(:, :);
  • assert_approximate()
    • single data type
      • real(4);
      • real(8);
    • vector data type
      • real(4), dimension(:);
      • real(8), dimension(:);
    • array data type
      • real(4), dimension(:, :);
      • real(8), dimension(:, :);
  • assert_great_then()
    • single data type
      • integer(1);
      • integer(2);
      • integer(4);
      • integer(8);
      • real(4);
      • real(8);
    • vector data type
      • integer(1), dimension(:);
      • integer(2), dimension(:);
      • integer(4), dimension(:);
      • integer(8), dimension(:);
      • real(4), dimension(:);
      • real(8), dimension(:);
    • array data type
      • integer(1), dimension(:, :);
      • integer(2), dimension(:, :);
      • integer(4), dimension(:, :);
      • integer(8), dimension(:, :);
      • real(4), dimension(:, :);
      • real(8), dimension(:, :);

Go to Top

Compiler Support

Compiler Compiler Compiler Compiler Compiler Compiler

Go to Top

License

License

Go to Top

About

Another Fortran unit test library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Fortran 97.6%
  • CMake 2.4%