From 0d8f07fd4f6119b84fadab2beb91dba9e73b5864 Mon Sep 17 00:00:00 2001 From: zoziha Date: Fri, 4 Aug 2023 21:14:32 +0800 Subject: [PATCH] add interface-limit-2 --- .github/workflows/fpm.yml | 4 +--- fpm.toml | 9 +++++-- .../interface-limit/interface_limit_main.f90 | 0 .../interface_limit_module.f90 | 0 .../interface_specific_main.f90 | 15 ++++++++++++ .../interface_specific_module.f90 | 24 +++++++++++++++++++ 6 files changed, 47 insertions(+), 5 deletions(-) rename src/{ => others}/interface-limit/interface_limit_main.f90 (100%) rename src/{ => others}/interface-limit/interface_limit_module.f90 (100%) create mode 100644 src/others/interface-specific/interface_specific_main.f90 create mode 100644 src/others/interface-specific/interface_specific_module.f90 diff --git a/.github/workflows/fpm.yml b/.github/workflows/fpm.yml index c948d5e..1142255 100644 --- a/.github/workflows/fpm.yml +++ b/.github/workflows/fpm.yml @@ -51,9 +51,7 @@ jobs: --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V} - name: Install fpm - uses: fortran-lang/setup-fpm@v3 - with: - fpm-version: 'v0.4.0' + uses: fortran-lang/setup-fpm@v5 - name: Build & Test run: | diff --git a/fpm.toml b/fpm.toml index 4992d0e..54f85c1 100644 --- a/fpm.toml +++ b/fpm.toml @@ -131,8 +131,13 @@ name = "wrapper" source-dir = "src/structural/wrapper" main = "wrapper_main.f90" -# interface-limit +# others [[test]] name = "interface-limit" -source-dir = "src/interface-limit" +source-dir = "src/others/interface-limit" main = "interface_limit_main.f90" + +[[test]] +name = "interface-specific" +source-dir = "src/others/interface-specific" +main = "interface_specific_main.f90" diff --git a/src/interface-limit/interface_limit_main.f90 b/src/others/interface-limit/interface_limit_main.f90 similarity index 100% rename from src/interface-limit/interface_limit_main.f90 rename to src/others/interface-limit/interface_limit_main.f90 diff --git a/src/interface-limit/interface_limit_module.f90 b/src/others/interface-limit/interface_limit_module.f90 similarity index 100% rename from src/interface-limit/interface_limit_module.f90 rename to src/others/interface-limit/interface_limit_module.f90 diff --git a/src/others/interface-specific/interface_specific_main.f90 b/src/others/interface-specific/interface_specific_main.f90 new file mode 100644 index 0000000..738cf60 --- /dev/null +++ b/src/others/interface-specific/interface_specific_main.f90 @@ -0,0 +1,15 @@ +!> @note use `select type` is a limited form of polymorphism +program interface_specific_main + + use interface_specific_module, only: shape, circle, print_circle + implicit none + class(shape), allocatable :: s1 + + allocate (circle :: s1) + + select type (s1) + type is (circle) + call print_circle(s1) + end select + +end program interface_specific_main diff --git a/src/others/interface-specific/interface_specific_module.f90 b/src/others/interface-specific/interface_specific_module.f90 new file mode 100644 index 0000000..154a2c8 --- /dev/null +++ b/src/others/interface-specific/interface_specific_module.f90 @@ -0,0 +1,24 @@ +module interface_specific_module + + implicit none + + private + public :: shape, circle, print_circle + + type, abstract :: shape + end type shape + + type, extends(shape) :: circle + end type circle + +contains + + !> print circle + subroutine print_circle(this) + type(circle), intent(in) :: this + + print *, 'circle' + + end subroutine print_circle + +end module interface_specific_module