#!/bin/sh
# -copyright-
#-# Copyright: 2015-2025 Willem Vermin wvermin@gmail.com
#-# 
#-# License: BSD-3-Clause
#-#  Redistribution and use in source and binary forms, with or without
#-#  modification, are permitted provided that the following conditions
#-#  are met:
#-#  1. Redistributions of source code must retain the above copyright
#-#     notice, this list of conditions and the following disclaimer.
#-#  2. Redistributions in binary form must reproduce the above copyright
#-#     notice, this list of conditions and the following disclaimer in the
#-#     documentation and/or other materials provided with the distribution.
#-#  3. Neither the name of the copyright holder nor the names of its
#-#     contributors may be used to endorse or promote products derived
#-#     from this software without specific prior written permission.
#-#   
#-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#-#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#-#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#-#  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE HOLDERS OR
#-#  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
#-#  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#-#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
#-#  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
#-#  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
#-#  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
#-#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

if test -e prelude ; then
   . ./prelude
else
   . ./debian/tests/prelude
fi
rc=0
doit=../doit
cat << eof > prog
      program main
      #define foo \\
bar \\
  a
      contains
      #ifdef foo \\
  bar \\
 a
      subroutine sub()
      #elif bar==1
      subroutine sub(a)
      #else
      subroutine sub(a,b)
      #endif
      continue
      end subroutine
      end program
eof
cat << eof > expect
      program main
#define foo \\
bar \\
  a
      contains
#ifdef foo \\
  bar \\
 a
         subroutine sub()
#elif bar==1
         subroutine sub(a)
#else
         subroutine sub(a,b)
#endif
            continue
         end subroutine
      end program
eof

$doit "-ifixed --input_format=fixed" "-I0 -i3" "for fixed input"
rc=`expr $rc + $?`

cat << eof > expect
program main
#define foo \\
bar \\
  a
contains
#ifdef foo \\
  bar \\
 a
   subroutine sub()
#elif bar==1
   subroutine sub(a)
#else
   subroutine sub(a,b)
#endif
      continue
   end subroutine
end program
eof

$doit "-ifree --input_format=free" "-I0 -i3" "for free input"
rc=`expr $rc + $?`

cat << eof > prog
      program main
      ??logical::foo = .true. &
      ?? .or. &
      ?? .or. .false.
      contains
      ??if(foo) &
      ?? then
      subroutine sub()
      ??else  if(bar) then
      subroutine sub(a)
      ??else
      subroutine sub(a,b)
      ??endif
      continue
      end subroutine
      ?? logical a= &
      ?? .true.
      end program
eof
cat << eof > expect
      program main
??logical::foo = .true. &
?? .or. &
?? .or. .false.
      contains
??if(foo) &
?? then
         subroutine sub()
??else  if(bar) then
         subroutine sub(a)
??else
         subroutine sub(a,b)
??endif
            continue
         end subroutine
?? logical a= &
?? .true.
      end program
eof

$doit "-ifixed --input_format=fixed" "-I0 -i3" "for fixed input"
rc=`expr $rc + $?`

cat << eof > expect
program main
??logical::foo = .true. &
?? .or. &
?? .or. .false.
contains
??if(foo) &
?? then
   subroutine sub()
??else  if(bar) then
   subroutine sub(a)
??else
   subroutine sub(a,b)
??endif
      continue
   end subroutine
?? logical a= &
?? .true.
end program
eof

$doit "-ifree --input_format=free" "-I0 -i3" "for free input"
rc=`expr $rc + $?`

cat << eof > prog
      program main
      #: set foo =  &
      1  + &
      3
      #:set bar = 0
      contains
      #:if foo ==  1
      subroutine sub()
      #:elif bar
      subroutine sub(a)
      #:else
      subroutine sub(a,b)
      #:endif
      continue
      end subroutine
      end program
eof
cat << eof > expect
program main
#: set foo =  &
      1  + &
      3
#:set bar = 0
contains
#:if foo ==  1
   subroutine sub()
#:elif bar
   subroutine sub(a)
#:else
   subroutine sub(a,b)
#:endif
      continue
   end subroutine
end program
eof

$doit "-ifree --input_format=free" "-I0 -i3" "for free input"
rc=`expr $rc + $?`

. ../postlude
exit $rc
