julienne_vector_test_description_s.F90 Source File


This file depends on

sourcefile~~julienne_vector_test_description_s.f90~~EfferentGraph sourcefile~julienne_vector_test_description_s.f90 julienne_vector_test_description_s.F90 sourcefile~julienne_vector_test_description_m.f90 julienne_vector_test_description_m.F90 sourcefile~julienne_vector_test_description_s.f90->sourcefile~julienne_vector_test_description_m.f90 sourcefile~julienne_string_m.f90 julienne_string_m.f90 sourcefile~julienne_vector_test_description_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_diagnosis_m.f90 julienne_test_diagnosis_m.F90 sourcefile~julienne_vector_test_description_m.f90->sourcefile~julienne_test_diagnosis_m.f90 sourcefile~julienne_test_result_m.f90 julienne_test_result_m.f90 sourcefile~julienne_vector_test_description_m.f90->sourcefile~julienne_test_result_m.f90 sourcefile~julienne_test_diagnosis_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_result_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_result_m.f90->sourcefile~julienne_test_diagnosis_m.f90

Source Code

! Copyright (c) 2024-2025, The Regents of the University of California and Sourcery Institute
! Terms of use are as specified in LICENSE.txt

#include "assert_macros.h"

submodule(julienne_vector_test_description_m) julienne_vector_test_description_s
  use assert_m
  implicit none

contains

  module procedure contains_characters
    integer i
    call_assert(allocated(self%descriptions_))
    match_vector = [(index(self%descriptions_(i)%string(), substring) /= 0, i = 1, size(self%descriptions_))]
  end procedure

  module procedure contains_string_t
    match_vector = self%contains_characters(substring%string())
  end procedure

#ifndef __GFORTRAN__

  module procedure construct_from_strings
    vector_test_description%descriptions_ = descriptions
    vector_test_description%vector_diagnosis_function_ => vector_diagnosis_function
  end procedure

#else

  module function construct_from_strings(descriptions, vector_diagnosis_function) result(vector_test_description)
    type(string_t), intent(in) :: descriptions(:)
    procedure(vector_diagnosis_function_i), intent(in), pointer, optional :: vector_diagnosis_function
    type(vector_test_description_t) vector_test_description
    vector_test_description%descriptions_ = descriptions
    if (present(vector_diagnosis_function)) vector_test_description%vector_diagnosis_function_ => vector_diagnosis_function
  end function

#endif

  module procedure run
    if (.not. associated(self%vector_diagnosis_function_)) then
      test_results = test_result_t(self%descriptions_)
    else
      associate(diagnoses => self%vector_diagnosis_function_())
#if defined(ASSERTIONS)
        associate(num_descriptions => size(self%descriptions_), num_results => size(diagnoses))
          call_assert(num_descriptions == num_results)
        end associate
#endif
        test_results = test_result_t(self%descriptions_, diagnoses)
      end associate
    end if
  end procedure

end submodule julienne_vector_test_description_s