-
Notifications
You must be signed in to change notification settings - Fork 173
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from Aman-Godara/format_string
improved aesthetics to make code consistent with stdlib's format make & cmake passed with msys2-gfortran-10.
- Loading branch information
Showing
7 changed files
with
148 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
! SPDX-Identifier: MIT | ||
module test_string_format_string | ||
use stdlib_strings, only: format_string, starts_with | ||
use stdlib_error, only: check | ||
use stdlib_optval, only: optval | ||
implicit none | ||
|
||
contains | ||
|
||
|
||
subroutine check_formatter(actual, expected, description, partial) | ||
character(len=*), intent(in) :: actual, expected, description | ||
logical, intent(in), optional :: partial | ||
logical :: stat | ||
character(len=:), allocatable :: msg | ||
|
||
if (optval(partial, .false.)) then | ||
stat = starts_with(actual, expected) | ||
else | ||
stat = actual == expected | ||
end if | ||
|
||
if (.not. stat) then | ||
msg = description // new_line("a") // & | ||
& "Expected: '" // expected // "' but got '" // actual // "'" | ||
else | ||
print '(" - ", a, /, " Result: ''", a, "''")', description, actual | ||
end if | ||
|
||
call check(stat, msg) | ||
|
||
end subroutine check_formatter | ||
|
||
subroutine test_format_string_complex | ||
call check_formatter(format_string((1, 1)), "(1.0", & | ||
& "Default formatter for complex number", partial=.true.) | ||
call check_formatter(format_string((1, 1), '(F6.2)'), "( 1.00, 1.00)", & | ||
& "Formatter for complex number") | ||
call check_formatter(format_string((-1, -1), '(F6.2)'), "( -1.00, -1.00)", & | ||
& "Formatter for negative complex number") | ||
call check_formatter(format_string((1, 1), '(SP,F6.2)'), "( +1.00, +1.00)", & | ||
& "Formatter with sign control descriptor for complex number") | ||
call check_formatter(format_string((1, 1), '(F6.2)') // format_string((2, 2), '(F7.3)'), & | ||
& "( 1.00, 1.00)( 2.000, 2.000)", & | ||
& "Multiple formatters for complex numbers") | ||
|
||
end subroutine test_format_string_complex | ||
|
||
subroutine test_format_string_integer | ||
call check_formatter(format_string(100), "100", & | ||
& "Default formatter for integer number") | ||
call check_formatter(format_string(100, '(I6)'), " 100", & | ||
& "Formatter for integer number") | ||
call check_formatter(format_string(100, '(I0.6)'), "000100", & | ||
& "Formatter with zero padding for integer number") | ||
call check_formatter(format_string(100, '(I6)') // format_string(1000, '(I7)'), & | ||
& " 100 1000", "Multiple formatters for integers") | ||
call check_formatter(format_string(34, '(B8)'), " 100010", & | ||
& "Binary formatter for integer number") | ||
call check_formatter(format_string(34, '(O0.3)'), "042", & | ||
& "Octal formatter with zero padding for integer number") | ||
call check_formatter(format_string(34, '(Z3)'), " 22", & | ||
& "Hexadecimal formatter for integer number") | ||
|
||
end subroutine test_format_string_integer | ||
|
||
subroutine test_format_string_real | ||
call check_formatter(format_string(100.), "100.0", & | ||
& "Default formatter for real number", partial=.true.) | ||
call check_formatter(format_string(100., '(F6.2)'), "100.00", & | ||
& "Formatter for real number") | ||
call check_formatter(format_string(289., '(E7.2)'), ".29E+03", & | ||
& "Exponential formatter with rounding for real number") | ||
call check_formatter(format_string(128., '(ES8.2)'), "1.28E+02", & | ||
& "Exponential formatter for real number") | ||
|
||
! Wrong demonstration | ||
call check_formatter(format_string(-100., '(F6.2)'), "*", & | ||
& "Too narrow formatter for signed real number", partial=.true.) | ||
call check_formatter(format_string(1000., '(F6.3)'), "*", & | ||
& "Too narrow formatter for real number", partial=.true.) | ||
call check_formatter(format_string(1000., '(7.3)'), "*", & | ||
& "Invalid formatter for real number", partial=.true.) | ||
|
||
end subroutine test_format_string_real | ||
|
||
subroutine test_format_string_logical | ||
call check_formatter(format_string(.true.), "T", & | ||
& "Default formatter for logcal value") | ||
call check_formatter(format_string(.true., '(L2)'), " T", & | ||
& "Formatter for logical value") | ||
call check_formatter(format_string(.false., '(L2)') // format_string(.true., '(L5)'), & | ||
& " F T", "Multiple formatters for logical values") | ||
|
||
! Wrong demonstration | ||
call check_formatter(format_string(.false., '(1x)'), "*", & | ||
& "Invalid formatter for logical value", partial=.true.) | ||
|
||
end subroutine test_format_string_logical | ||
|
||
|
||
end module test_string_format_string | ||
|
||
program tester | ||
use test_string_format_string | ||
implicit none | ||
|
||
call test_format_string_complex | ||
call test_format_string_integer | ||
call test_format_string_logical | ||
call test_format_string_real | ||
|
||
end program tester |
This file was deleted.
Oops, something went wrong.