Re: compiler switch -c
- From: "Gerry Ford" <invalid@xxxxxxxxxxx>
- Date: Thu, 7 Feb 2008 00:40:28 -0700
"Steven G. Kargl" <kargl@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:fod916$a65$1@xxxxxxxxxxxxxxxxxxxxxxxxxx
In article <1202332397_5659@xxxxxxxxxxxxxxxxxxxxx>,#begin source for fruit.f90
"Gerry Ford" <invalid@xxxxxxxxxxx> writes:
I'm using a new compiler and am uncertain about a variety of things,
Clearly. :)
beginning with the switches. When I type
gfortran -c fruit.f90
, it is meant to mimic
ifort -c fruit.f90
gfortran's -c option comes from a long history of compilers
on Unix-like platforms. It is not meant to mimic ifort.
, which I thought, yields the intermediate files instead of an
executable.
Indeed, five minutes ago I typed
gfortran -c fruit_util.f90
, and got a .o and .mod file out of it without objection.
If you got a .o and zero or more .mod files, then -c did its job.
As to the specific complaints, there were many:fruit.f90:343.28:
function get_last_message_
1
Error: Expected formal argument list in function definition at (1)
Without seeing source code and without knowing the exact gfortran
command and without knowing the version of gfortran, it is amazingly
difficult to give any advice.
!------------------------
! FORTRAN unit test utility
!
! Author: Andrew H. Chen meihome @at@ gmail.com
!------------------------
!
! Unit test framework for FORTRAN. (FoRtran UnIT)
!
! This package is to perform unit test for FORTRAN subroutines
!
! The method used most are: assert_true, assert_equals
!
! Coding convention:
! 1) All private subroutines end with underscore. i.e. init_fruit_
! 2) All methods must be exposed by interface. i.e. interface init_fruit
! 3) Variable and methods are lower case connected with underscores. i.e.
init_fruit_, and failed_assert_count
!
module fruit
use fruit_util
implicit none
integer, parameter :: MSG_LENGTH = 1500
integer, parameter :: MSG_STACK_SIZE = 300000
integer, private, save :: successful_assert_count = 0
integer, private, save :: failed_assert_count = 0
character (len = MSG_LENGTH), private, dimension (MSG_STACK_SIZE), save ::
messageArray
character (len = MSG_LENGTH), private, save :: msg = '[unit name not set
from set_name]: '
character (len = MSG_LENGTH), private, save :: unit_name = '_not_set_'
integer, private, save :: messageIndex = 1
integer, private, save :: successful_case_count = 0
integer, private, save :: failed_case_count = 0
integer, private, save :: testCaseIndex = 1
logical, private, save :: last_passed = .false.
interface init_fruit
module procedure init_fruit_
end interface
interface initializeFruit
module procedure obsolete_subroutine_delete_later_initializeFruit_
end interface
interface fruit_summary
module procedure fruit_summary_
end interface
interface getTestSummary
module procedure obsolete_subroutine_delete_later_getTestSummary_
end interface
interface get_last_message
module procedure get_last_message_
end interface
interface is_last_passed
module procedure is_last_passed_
end interface
interface assert_true
module procedure assert_true_logical_
end interface
interface assertTrue
module procedure obsolete_delete_this_later_assert_true_logical_
end interface
interface assert_equals
module procedure assert_equals_int_
module procedure assert_equals_double_
module procedure assert_equals_real_
module procedure assert_equals_logical_
module procedure assert_equals_string_
module procedure assert_equals_complex_
module procedure assert_equals_real_within_range_
module procedure assert_equals_double_within_range_
module procedure assert_equals_1d_int_
module procedure assert_equals_1d_double_
module procedure assert_equals_1d_real_
module procedure assert_equals_1d_string_
module procedure assert_equals_1d_complex_
module procedure assert_equals_1d_real_within_range_
module procedure assert_equals_1d_double_within_range_
module procedure assert_equals_2d_int_
module procedure assert_equals_2d_double_
module procedure assert_equals_2d_real_
module procedure assert_equals_2d_complex_
end interface
interface assertEquals
module procedure assert_equals_int_
module procedure assert_equals_double_
module procedure assert_equals_real_
module procedure assert_equals_logical_
module procedure assert_equals_string_
module procedure assert_equals_complex_
module procedure assert_equals_real_within_range_
module procedure assert_equals_double_within_range_
module procedure assert_equals_1d_int_
module procedure assert_equals_1d_double_
module procedure assert_equals_1d_real_
module procedure assert_equals_1d_string_
module procedure assert_equals_1d_complex_
module procedure assert_equals_1d_real_within_range_
module procedure assert_equals_1d_double_within_range_
module procedure assert_equals_2d_int_
module procedure assert_equals_2d_double_
module procedure assert_equals_2d_real_
module procedure assert_equals_2d_complex_
end interface
interface assert_not_equals
module procedure assert_not_equals_real_
module procedure assert_not_equals_1d_real_
module procedure assert_not_equals_double_
end interface
interface assertNotEquals
module procedure assert_not_equals_real_
module procedure assert_not_equals_1d_real_
module procedure assert_not_equals_double_
end interface
interface add_success
module procedure add_success_
end interface
interface addSuccess
module procedure obsolete_subroutine_delete_later_addSuccess_
end interface
interface add_fail
module procedure add_fail_
module procedure add_fail_unit_
end interface
interface addFail
module procedure add_fail_
module procedure add_fail_unit_
end interface
interface set_unit_name
module procedure set_unit_name_
end interface
interface get_unit_name
module procedure get_unit_name_
end interface
interface getTotalCount
module procedure obsolete_subroutine_delete_later_getTotalCount_
end interface
interface get_total_count
module procedure get_total_count_
end interface
interface getFailedCount
module procedure obsolete_subroutine_delete_later_getFailedCount_
end interface
interface get_failed_count
module procedure get_failed_count_
end interface
interface success_assert_action
module procedure success_assert_action_
end interface
interface failed_assert_action
module procedure failed_assert_action_
end interface
interface isAllSuccessful
module procedure obsolete_subroutine_delete_later_isAllSuccessful_
end interface
interface is_all_successful
module procedure is_all_successful_
end interface
private :: &
init_fruit_, obsolete_subroutine_delete_later_initializeFruit_, &
fruit_summary_, obsolete_subroutine_delete_later_getTestSummary_, &
get_last_message_, obsolete_, make_error_msg_, &
get_total_count_, obsolete_subroutine_delete_later_getTotalCount_,&
get_failed_count_, obsolete_subroutine_delete_later_getFailedCount_,
&
add_fail_, add_fail_unit_, increase_message_stack_, &
success_assert_action_, failed_assert_action_, success_mark_,
failed_mark_, &
assert_true_logical_,
obsolete_delete_this_later_assert_true_logical_, &
assert_equals_int_, &
assert_equals_double_, &
assert_equals_real_, &
assert_equals_logical_, &
assert_equals_string_, &
assert_equals_complex_, &
assert_equals_real_within_range_, &
assert_equals_double_within_range_, &
assert_equals_1d_int_, &
assert_equals_1d_double_, &
assert_equals_1d_real_, &
assert_equals_1d_string_, &
assert_equals_1d_complex_, &
assert_equals_2d_int_, &
assert_equals_2d_double_, &
assert_equals_2d_real_, &
assert_equals_2d_complex_, &
assert_equals_1d_real_within_range_, &
assert_equals_1d_double_within_range_, &
assert_not_equals_real_, &
assert_not_equals_double_, &
assert_not_equals_1d_real_, &
add_success_, obsolete_subroutine_delete_later_addSuccess_, &
is_all_successful_,
obsolete_subroutine_delete_later_isAllSuccessful_, &
set_unit_name_, get_unit_name_, is_last_passed_
contains
subroutine init_fruit_
successful_assert_count = 0
failed_assert_count = 0
messageIndex = 1
write (*,*)
write (*,*) "Test module initialized"
write (*,*)
write (*,*) " . : successful assert, F : failed assert "
write (*,*)
end subroutine init_fruit_
subroutine obsolete_subroutine_delete_later_initializeFruit_
call obsolete_ ("initializeFruit is OBSOLETE. replaced by init_fruit")
call init_fruit
end subroutine obsolete_subroutine_delete_later_initializeFruit_
subroutine obsolete_subroutine_delete_later_getTestSummary_
call obsolete_ ( "getTestSummary is OBSOLETE. replaced by
fruit_summary")
call fruit_summary
end subroutine obsolete_subroutine_delete_later_getTestSummary_
subroutine fruit_summary_
integer :: i
write (*,*)
write (*,*)
write (*,*) ' Start of FRUIT summary: '
write (*,*)
if (failed_assert_count > 0) then
write (*,*) 'Some tests failed!'
else
write (*,*) 'SUCCESSFUL!'
end if
write (*,*)
if ( messageIndex > 1) then
write (*,*) ' -- Failed assertion messages:'
do i = 1, messageIndex - 1
write (*,"(A)") trim(strip(messageArray(i)))
end do
write (*,*) ' -- end of failed assertion messages.'
write (*,*)
else
write (*,*) ' No messages '
end if
if (successful_assert_count + failed_assert_count /= 0) then
write (*,*) 'Total asserts : ', successful_assert_count +
failed_assert_count
write (*,*) 'Successful : ', successful_assert_count
write (*,*) 'Failed : ', failed_assert_count
write (*,'("Successful rate: ",f6.2,"%")')
real(successful_assert_count) * 100.0 / &
real (successful_assert_count + failed_assert_count)
write (*, *)
write (*,*) 'Successful asserts / total asserts : [ ',&
successful_assert_count, '/', successful_assert_count +
failed_assert_count, ' ]'
write (*,*) 'Successful cases / total cases : [ ',
successful_case_count, '/', &
successful_case_count + failed_case_count, ' ]'
write (*, *) ' -- end of FRUIT summary'
end if
end subroutine fruit_summary_
subroutine obsolete_subroutine_delete_later_addSuccess_
call obsolete_ ("addSuccess is OBSOLETE. replaced by add_success")
call add_success_
end subroutine obsolete_subroutine_delete_later_addSuccess_
subroutine add_success_
call success_assert_action_
end subroutine add_success_
subroutine add_fail_ (message)
character (*), intent (in), optional :: message
call failed_assert_action_('none', 'none', message)
end subroutine add_fail_
subroutine add_fail_unit_ (unitName, message)
character (*), intent (in) :: unitName
character (*), intent (in) :: message
call add_fail_ ("[in " // unitName // "(fail)]: " // message)
end subroutine add_fail_unit_
subroutine obsolete_subroutine_delete_later_isAllSuccessful_(result)
logical, intent(out) :: result
call obsolete_ ('subroutine isAllSuccessful is changed to function
is_all_successful.')
result = (failed_assert_count .eq. 0 )
end subroutine obsolete_subroutine_delete_later_isAllSuccessful_
subroutine is_all_successful_(result)
logical, intent(out) :: result
result= (failed_assert_count .eq. 0 )
end subroutine is_all_successful_
subroutine success_mark_
write(*,"(A1)",ADVANCE='NO') '.'
end subroutine success_mark_
subroutine failed_mark_
write(*,"(A1)",ADVANCE='NO') 'F'
end subroutine failed_mark_
subroutine increase_message_stack_
if (messageIndex > MSG_STACK_SIZE) then
write (*, *) "Too many errors to put into stack"
call getTestSummary ()
stop 1
end if
messageArray (messageIndex) = msg
messageIndex = messageIndex + 1
end subroutine increase_message_stack_
function get_last_message_
character(len=MSG_LENGTH) :: get_last_message_
if (messageIndex > 1) then
get_last_message_ = strip(messageArray(messageIndex-1))
else
get_last_message_ = ''
end if
end function get_last_message_
subroutine obsolete_subroutine_delete_later_getTotalCount_ (count)
integer, intent (out) :: count
call obsolete_ (' getTotalCount subroutine is replaced by function
get_total_count')
call get_total_count_(count)
end subroutine obsolete_subroutine_delete_later_getTotalCount_
subroutine get_total_count_(count)
integer, intent(out) :: count
count = successful_assert_count + failed_assert_count
end subroutine get_total_count_
subroutine obsolete_subroutine_delete_later_getFailedCount_ (count)
integer, intent (out) :: count
call obsolete_ (' getFailedCount subroutine is replaced by function
get_failed_count')
call get_failed_count_ (count)
end subroutine obsolete_subroutine_delete_later_getFailedCount_
subroutine get_failed_count_ (count)
integer, intent(out) :: count
count = failed_assert_count
end subroutine get_failed_count_
subroutine obsolete_ (message)
character (*), intent (in), optional :: message
write (*,*)
write (*,*) "<<<<<<<<<<<<<<<<<<<<<<<<<< WARNING from FRUIT
write (*,*) message"
write (*,*)
write (*,*) " old calls will be replaced in the next release in Jan
2009"
write (*,*) " Naming convention for all the method calls are changed to:
first_name from firstName"
write (*,*) " Subroutines will be deleted: assertEquals,
assertNotEquals, assertTrue, addSuccessful, addFail, etc."
write (*,*) "<<<<<<<<<<<<<<<<<<<<<<<<<< WARNING from FRUIT
write (*,*)"
end subroutine obsolete_
subroutine success_assert_action_
successful_assert_count = successful_assert_count + 1
last_passed = .true.
call success_mark_
end subroutine success_assert_action_
subroutine failed_assert_action_ (expected, got, message)
character(*), intent(in) :: expected, got
character(*), intent(in), optional :: message
call make_error_msg_ (expected, got, message)
call increase_message_stack_
failed_assert_count = failed_assert_count + 1
last_passed = .false.
call failed_mark_
end subroutine failed_assert_action_
subroutine set_unit_name_(value)
character(*), intent(in) :: value
unit_name = strip(value)
end subroutine set_unit_name_
subroutine get_unit_name_(value)
character(*), intent(out) :: value
value = strip(unit_name)
end subroutine get_unit_name_
subroutine make_error_msg_ (var1, var2, message)
character(*), intent(in) :: var1, var2
character(*), intent(in), optional :: message
if (present(message)) then
msg = '[' // trim(strip(unit_name)) // ']: Expected [' //
trim(strip(var1)) // '], Got [' // trim(strip(var2)) // ']; '// &
' User message: [' // message // ']'
else
msg = '[' // trim(strip(unit_name)) // ']: Expected [' //
trim(strip(var1)) // '], Got [' // trim(strip(var2)) // ']'
endif
end subroutine make_error_msg_
function is_last_passed_
logical:: is_last_passed_
is_last_passed_ = last_passed
end function is_last_passed_
!--------------------------------------------------------------------------------
! all assertions
!--------------------------------------------------------------------------------
subroutine obsolete_delete_this_later_assert_true_logical_(var1, message)
logical, intent (in) :: var1
character (*), intent (in), optional :: message
call obsolete_ ('assertTrue subroutine is replaced by function
assert_true')
call assert_true_logical_(var1, message)
end subroutine obsolete_delete_this_later_assert_true_logical_
subroutine assert_true_logical_ (var1, message)
logical, intent (in) :: var1
character (*), intent (in), optional :: message
if ( var1 .eqv. .true.) then
call success_assert_action_
else
call failed_assert_action_(to_s(.true.), to_s(var1), message)
end if
end subroutine assert_true_logical_
subroutine assert_equals_int_ (var1, var2, message)
integer, intent(in) :: var1, var2
character (*), intent(in), optional :: message
if ( var1 .eq. var2) then
call success_assert_action_
else
call failed_assert_action_ (to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_int_
subroutine assert_equals_logical_ (var1, var2, message)
logical, intent (in) :: var1, var2
character (*), intent (in), optional :: message
if ( var1 .eqv. var2 ) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_logical_
subroutine assert_equals_string_ (var1, var2, message)
character(*), intent (in) :: var1, var2
character (*), intent (in), optional :: message
if ( trim(strip(var1)) == trim(strip(var2))) then
call success_assert_action_
else
call failed_assert_action_(var1, var2, message)
end if
end subroutine assert_equals_string_
subroutine assert_equals_real_ (var1, var2, message)
real, intent (in) :: var1, var2
character (*), intent (in), optional :: message
if ( var1 .eq. var2) then
call success_assert_action_
else
7 call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_real_
subroutine assert_equals_double_ (var1, var2, message)
double precision, intent (in) :: var1, var2
character(*), intent(in), optional :: message
if ( var1 .eq. var2) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_double_
subroutine assert_equals_complex_ (var1, var2, message)
double complex, intent(IN) :: var1, var2
character (*), intent(IN), optional :: message
integer count
if ( var1 .ne. var2) then
call failed_assert_action_(to_s(var1), to_s(var2), message)
else
call success_assert_action_
end if
end subroutine assert_equals_complex_
subroutine assert_equals_real_within_range_(var1, var2, var3, message)
real, intent (in) :: var1, var2, var3
character(*), intent(in), optional :: message
if ( abs( var1 - var2) .le. var3) then
call success_assert_action_
else
call failed_assert_action(to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_real_within_range_
subroutine assert_equals_double_within_range_(var1, var2, var3, message)
double precision, intent (in) :: var1, var2, var3
character(*), intent(in), optional :: message
if ( abs( var1 - var2) .le. var3) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_equals_double_within_range_
subroutine assert_equals_1d_int_ (var1, var2, n, message)
integer, intent (in) :: n
integer, intent (in) :: var1(n), var2(n)
character (*), intent (in), optional :: message
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action_(to_s(var1(count)), to_s(var2(count)),
message)
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_int_
subroutine assert_equals_1d_string_ (var1, var2, n, message)
integer, intent (in) :: n
character(*), intent (in) :: var1(n), var2(n)
character (*), intent (in), optional :: message
integer count
loop_dim1: do count = 1, n
if ( strip(var1(count)) .ne. strip(var2(count))) then
call failed_assert_action_(var1(count), var2(count), message)
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_string_
subroutine assert_equals_1d_real_within_range_(var1, var2, n, var3,
message)
integer, intent(in) :: n
real, intent (in) :: var1(n), var2(n), var3
character(*), intent(in), optional :: message
if ( maxval( abs( var1 - var2)) .le. var3) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1(1)), to_s(var2(1)), '1D array
real has difference' // ' ' // message)
end if
end subroutine assert_equals_1d_real_within_range_
subroutine assert_equals_1d_double_within_range_(var1, var2, n, var3,
message)
integer, intent(in) :: n
double precision, intent (in) :: var1(n), var2(n), var3
character(*), intent(in), optional :: message
if ( maxval( abs( var1 - var2)) .le. var3) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1(1)), to_s(var2(1)), message)
end if
end subroutine assert_equals_1d_double_within_range_
subroutine assert_equals_1d_double (var1, var2, n, message)
integer, intent (in) :: n
double precision, intent (in) :: var1(n), var2(n)
character(*), intent(in), optional :: message
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action_(to_s(var1(count)), to_s(var2(count)), &
'Array different at count: ' // to_s(count) // ' ' //
message)
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_double
subroutine assert_equals_2d_real (var1, var2, n, m)
integer, intent (in) :: n, m
real, intent (in) :: var1(n,m), var2(n,m)
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action(to_s(var1(count1, count2)),
to_s(var2(count1, count2)),&
'Array (' // to_s(count1) // ',' // to_s( count2) //')')
return
end if
end do loop_dim1
end do loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_real
subroutine assert_equals_2d_double (var1, var2, n, m)
integer, intent (in) :: n, m
double precision, intent (in) :: var1(n,m), var2(n,m)
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action_(to_s(var1(count1, count2)),
to_s(var2(count1, count2)), &
'Array difference at (' // to_s(count1) // ',' //
to_s(count2) // ')')
return
end if
end do loop_dim1
end do loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_double
subroutine assert_equals_2d_int_ (var1, var2, n, m, message)
integer, intent (in) :: n, m
integer, intent (in) :: var1(n,m), var2(n,m)
character (*), intent (in), optional :: message
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action_(to_s(var1(count1, count2)),
to_s(var2(count1, count2)), message)
return
end if
end do loop_dim1
end do loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_int_
subroutine assert_equals_1d_real_ (var1, var2, n, message)
integer, intent (in) :: n
real, intent (in) :: var1(n), var2(n)
character (*), intent (in), optional :: message
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action_(to_s(var1(count)), to_s(var2(count)),
message)
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_real_
subroutine assert_equals_2d_real_ (var1, var2, n, m, message)
integer, intent (in) :: n, m
real, intent (in) :: var1(n,m), var2(n,m)
character (*), intent(in), optional :: message
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action_(to_s(var1(count1, count2)),
to_s(var2(count1, count2)), message)
return
end if
end do loop_dim1
end do loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_real_
subroutine assert_equals_1d_double_ (var1, var2, n, message)
integer, intent (in) :: n
double precision, intent (in) :: var1(n), var2(n)
character (*), intent (in), optional :: message
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action_(to_s(var1(count)), to_s(var2(count)),
message)
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_double_
subroutine assert_equals_2d_double_ (var1, var2, n, m, message)
integer, intent (in) :: n, m
double precision, intent (in) :: var1(n,m), var2(n,m)
character (*), intent (in), optional :: message
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action_(to_s(var1(count1, count2)),
to_s(var2(count1, count2)), message)
return
end if
end do loop_dim1
end do loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_double_
subroutine assert_equals_1d_complex_ (var1, var2, n, message)
integer, intent(IN) :: n
double complex, intent(IN) :: var1(n), var2(n)
character (*), intent(IN), optional :: message
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action_(to_s(var1(count)), to_s(var2(count)),
message)
return
end if
enddo loop_dim1
call success_assert_action_
end subroutine assert_equals_1d_complex_
subroutine assert_equals_2d_complex_ (var1, var2, n, m, message)
integer, intent(IN) :: n, m
double complex, intent(IN) :: var1(n,m), var2(n,m)
character (*), intent(IN), optional :: message
integer count1, count2
loop_dim2: do count2 = 1, m
loop_dim1: do count1 = 1, n
if ( var1(count1,count2) .ne. var2(count1,count2)) then
call failed_assert_action_(to_s(var1(count1, count2)),
to_s(var2(count1, count2)), message)
return
endif
enddo loop_dim1
enddo loop_dim2
call success_assert_action_
end subroutine assert_equals_2d_complex_
subroutine assert_not_equals_real_ (var1, var2, message)
real, intent (in) :: var1, var2
character (*), intent (in), optional :: message
if ( var1 .ne. var2) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_not_equals_real_
subroutine assert_not_equals_double_ (var1, var2, message)
double precision, intent (in) :: var1, var2
character(*), intent(in), optional :: message
if ( var1 .ne. var2) then
call success_assert_action_
else
call failed_assert_action_(to_s(var1), to_s(var2), message)
end if
end subroutine assert_not_equals_double_
subroutine assert_not_equals_1d_real_ (var1, var2, n)
integer, intent (in) :: n
real, intent (in) :: var1(n), var2(n)
integer count
loop_dim1: do count = 1, n
if ( var1(count) .ne. var2(count)) then
call failed_assert_action(to_s(var1(count)), to_s(var2(count)),&
'Array (' // to_s(count)//')')
return
end if
end do loop_dim1
call success_assert_action_
end subroutine assert_not_equals_1d_real_
end module fruit
#end source
A longish post, yes. Steve left the first error quoted, so I think
everything's here for the reader.
One thing it doesn't seem to be is source fold-over. The first error was in
get_last_function, and the lines there were less fifty chars. Am I correct
that the way to deal with folded-over lines in f90 is to put an & at the end
of the top line and another at the beginning of the next?
One thing that makes me suspicious is right in the beginning, with no
filetype on what is being used. I have a file called fruit_util.mod in that
same folder.
module fruit
use fruit_util
implicit none
--
Gerry Ford
"The apple was really a peach."
-- Allison Dunn on the garden of eden
.
- Follow-Ups:
- Re: compiler switch -c
- From: paul . richard . thomas
- Re: compiler switch -c
- From: FX
- Re: compiler switch -c
- References:
- compiler switch -c
- From: Gerry Ford
- Re: compiler switch -c
- From: Steven G. Kargl
- compiler switch -c
- Prev by Date: Re: Way to autogenerate C/C++ Headers?
- Next by Date: Re: passing fortran arrays
- Previous by thread: Re: compiler switch -c
- Next by thread: Re: compiler switch -c
- Index(es):