Skip to content

Commit 426c6da

Browse files
committed
feat(string_t):operator(/=) for string_t/character
1 parent 8d59c93 commit 426c6da

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

src/sourcery/sourcery_string_m.f90

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ module sourcery_string_m
1414
generic :: string => as_character
1515
procedure :: is_allocated
1616
procedure :: get_json_key
17-
procedure, private :: &
18-
get_json_integer_array, get_json_logical, get_json_integer, get_json_string, get_json_real
17+
generic :: operator(/=) => string_t_ne_string_t, string_t_ne_character, character_ne_string_t
18+
generic :: operator(==) => string_t_eq_string_t, string_t_eq_character, character_eq_string_t
1919
generic :: get_json_value => &
2020
get_json_integer_array, get_json_logical, get_json_integer, get_json_string, get_json_real
21+
procedure, private :: &
22+
get_json_integer_array, get_json_logical, get_json_integer, get_json_string, get_json_real
23+
procedure, private :: string_t_ne_string_t, string_t_ne_character
24+
procedure, private, pass(rhs) :: character_ne_string_t
2125
procedure, private :: string_t_eq_string_t, string_t_eq_character
2226
procedure, private, pass(rhs) :: character_eq_string_t
23-
generic :: operator(==) => string_t_eq_string_t, string_t_eq_character, character_eq_string_t
2427
end type
2528

2629
interface string_t
@@ -113,6 +116,26 @@ elemental module function character_eq_string_t(lhs, rhs) result(lhs_eq_rhs)
113116
logical lhs_eq_rhs
114117
end function
115118

119+
elemental module function string_t_ne_string_t(lhs, rhs) result(lhs_ne_rhs)
120+
implicit none
121+
class(string_t), intent(in) :: lhs, rhs
122+
logical lhs_ne_rhs
123+
end function
124+
125+
elemental module function string_t_ne_character(lhs, rhs) result(lhs_ne_rhs)
126+
implicit none
127+
class(string_t), intent(in) :: lhs
128+
character(len=*), intent(in) :: rhs
129+
logical lhs_ne_rhs
130+
end function
131+
132+
elemental module function character_ne_string_t(lhs, rhs) result(lhs_ne_rhs)
133+
implicit none
134+
class(string_t), intent(in) :: rhs
135+
character(len=*), intent(in) :: lhs
136+
logical lhs_ne_rhs
137+
end function
138+
116139
end interface
117140

118141
end module sourcery_string_m

src/sourcery/sourcery_string_s.f90

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,16 @@
167167
lhs_eq_rhs = lhs == rhs%string()
168168
end procedure
169169

170+
module procedure string_t_ne_string_t
171+
lhs_ne_rhs = lhs%string() /= rhs%string()
172+
end procedure
173+
174+
module procedure string_t_ne_character
175+
lhs_ne_rhs = lhs%string() /= rhs
176+
end procedure
177+
178+
module procedure character_ne_string_t
179+
lhs_ne_rhs = lhs /= rhs%string()
180+
end procedure
181+
170182
end submodule sourcery_string_s

test/string_test.f90

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ function results() result(test_results)
3030
test_result_t("extracting a logical value from a colon-separated key/value pair", extracts_logical_value()), &
3131
test_result_t("extracting an integer array value from a colon-separated key/value pair", extracts_integer_array_value()), &
3232
test_result_t("extracting an integer value from a colon-separated key/value pair", extracts_integer_value()), &
33-
test_result_t('supporting operator(==) for string_t and character operands', supports_equivalence_operator()) &
33+
test_result_t('supporting operator(==) for string_t and character operands', supports_equivalence_operator()), &
34+
test_result_t('supporting operator(/=) for string_t and character operands', supports_non_equivalence_operator()) &
3435
]
3536
end function
3637

@@ -112,4 +113,12 @@ function supports_equivalence_operator() result(passed)
112113
"123.456" == string_t("123.456")
113114
end function
114115

116+
function supports_non_equivalence_operator() result(passed)
117+
logical passed
118+
passed = &
119+
string_t("abcdefg") /= string_t("xyz pdq") .and. &
120+
string_t("xyz pdq") /= "abcdefg" .and. &
121+
"123.456" /= string_t("456.123")
122+
end function
123+
115124
end module string_test_m

0 commit comments

Comments
 (0)