From 5f3612f7aeed563f98de95d08490717552444a22 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 29 Sep 2011 22:23:54 -0400 Subject: [PATCH] Added unit test for mesh subroutines. --- src/tests/Makefile | 2 +- src/tests/test_mesh.f90 | 67 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/tests/test_mesh.f90 diff --git a/src/tests/Makefile b/src/tests/Makefile index d4d96d8e9a..e30cc5492a 100644 --- a/src/tests/Makefile +++ b/src/tests/Makefile @@ -21,7 +21,7 @@ all: $(executables) $(executables): $(test_objects) $(objects) $(F90) $(LDFLAGS) $@.o $(objects) -o $@ clean: - @rm -f *.o *.mod $(tests) + @rm -f *.o *.mod $(executables) neat: @rm -f *.o *.mod diff --git a/src/tests/test_mesh.f90 b/src/tests/test_mesh.f90 new file mode 100644 index 0000000000..ffed41e39c --- /dev/null +++ b/src/tests/test_mesh.f90 @@ -0,0 +1,67 @@ +program test_mesh + + use mesh, only: mesh_indices_to_bin, bin_to_mesh_indices + use mesh_header, only: StructuredMesh + + implicit none + + integer :: i, j, k + integer :: x, y, z + integer :: ijk(3), ijk_new(3) + integer :: bin, bin_new + integer, parameter :: n = 3 + real(8) :: xyz(3) + logical :: passed + type(StructuredMesh), pointer :: m => null() + + x = 21 + y = 16 + z = 52 + + allocate(m) + m % n_dimension = n + allocate(m % dimension(n)) + m % dimension = (/ x, y, z /) + + passed = .true. + write(*,'(A)', ADVANCE='no') "Testing ijk --> bin:" + do i = 1, x + do j = 1, y + do k = 1, z + ijk = (/ i, j, k /) + bin = mesh_indices_to_bin(m, ijk) + call bin_to_mesh_indices(m, bin, ijk_new) + + ! Check to make sure new indices match old + if (any(ijk /= ijk_new)) passed = .false. + end do + end do + end do + call write_result(passed) + + passed = .true. + write(*,'(A)', ADVANCE='no') "Testing bin --> ijk:" + do bin = 1, product(m % dimension) + call bin_to_mesh_indices(m, bin, ijk) + bin_new = mesh_indices_to_bin(m, ijk) + + ! Check to make sure new bin matches old + if (bin_new /= bin) passed = .false. + end do + call write_result(passed) + +contains + + subroutine write_result(passed) + + logical, intent(in) :: passed + + if (passed) then + write (*,'(5X,A)') char(27) // '[32mPASSED' // char(27) // '[30m' + else + write (*,'(5X,A)') char(27) // '[31mFAILED' // char(27) // '[30m' + end if + + end subroutine write_result + +end program test_mesh