B: Fix typecheck on multi filter

This commit is contained in:
Ivan 2024-12-03 22:04:24 +03:00
parent dc395e1ac8
commit 711361781e
5 changed files with 17 additions and 8 deletions

View File

@ -18,9 +18,11 @@ public:
: context{ context } {} : context{ context } {}
public: public:
[[nodiscard]] bool CompareTemplated(Typification::Substitutes& substitutes, [[nodiscard]] bool CompareTemplated(
const Typification& arg, Typification::Substitutes& substitutes,
const Typification& value); const Typification& arg,
const Typification& value
);
[[nodiscard]] bool IsArithmetic(const Typification& type) const; [[nodiscard]] bool IsArithmetic(const Typification& type) const;
[[nodiscard]] bool IsOrdered(const Typification& type) const; [[nodiscard]] bool IsOrdered(const Typification& type) const;
[[nodiscard]] std::optional<Typification> Merge(const Typification& type1, const Typification& type2) const; [[nodiscard]] std::optional<Typification> Merge(const Typification& type1, const Typification& type2) const;

View File

@ -965,7 +965,7 @@ bool TypeAuditor::ViFilter(Cursor iter) {
const auto maybeArgument = ChildType(iter, static_cast<Index>(iter.ChildrenCount() - 1)); const auto maybeArgument = ChildType(iter, static_cast<Index>(iter.ChildrenCount() - 1));
if (!maybeArgument.has_value()) { if (!maybeArgument.has_value()) {
return false; return false;
} }
const auto& argument = std::get<Typification>(maybeArgument.value()); const auto& argument = std::get<Typification>(maybeArgument.value());
if (argument.IsAnyType() || (argument.IsCollection() && argument.B().Base().IsAnyType())) { if (argument.IsAnyType() || (argument.IsCollection() && argument.B().Base().IsAnyType())) {
return SetCurrent(Typification::EmptySet()); return SetCurrent(Typification::EmptySet());
@ -1008,7 +1008,6 @@ bool TypeAuditor::ViFilter(Cursor iter) {
); );
return false; return false;
} }
++child; // NOLINT(clang-diagnostic-for-loop-analysis)
} }
} else { } else {
const auto param = ChildType(iter, 0); const auto param = ChildType(iter, 0);

View File

@ -347,6 +347,7 @@ TEST_F(UTTypeAuditor, TypedOperationsCorrect) {
ExpectTypification(R"(Pr1(S1))", "B(X1)"_t); ExpectTypification(R"(Pr1(S1))", "B(X1)"_t);
ExpectTypification(R"(Fi1[X1](S1))", "B(X1*X1)"_t); ExpectTypification(R"(Fi1[X1](S1))", "B(X1*X1)"_t);
ExpectTypification(R"(Fi1,2[X1, X1](S1))", "B(X1*X1)"_t); ExpectTypification(R"(Fi1,2[X1, X1](S1))", "B(X1*X1)"_t);
ExpectTypification(R"(Fi1,2[X1, X1](X1*X1))", "B(X1*X1)"_t);
ExpectTypification(R"(Fi1,2[X1 * X1](S1))", "B(X1*X1)"_t); ExpectTypification(R"(Fi1,2[X1 * X1](S1))", "B(X1*X1)"_t);
ExpectTypification(R"(Fi1[{1,2,3}](Z*X1))", "B(Z*X1)"_t); ExpectTypification(R"(Fi1[{1,2,3}](Z*X1))", "B(Z*X1)"_t);
ExpectTypification(R"(Fi1[{1,2,3}](C1*X1))", "B(C1*X1)"_t); ExpectTypification(R"(Fi1[{1,2,3}](C1*X1))", "B(C1*X1)"_t);
@ -374,6 +375,7 @@ TEST_F(UTTypeAuditor, TypedOperationsErrors) {
ExpectError(R"(Fi1[Z](B(X1)))", SemanticEID::invalidFilterArgumentType, 7); ExpectError(R"(Fi1[Z](B(X1)))", SemanticEID::invalidFilterArgumentType, 7);
ExpectError(R"(Fi3[X1](X1*X1))", SemanticEID::invalidFilterArgumentType, 8); ExpectError(R"(Fi3[X1](X1*X1))", SemanticEID::invalidFilterArgumentType, 8);
ExpectError(R"(Fi1[X1](B(X1)*X1))", SemanticEID::typesNotEqual, 4); ExpectError(R"(Fi1[X1](B(X1)*X1))", SemanticEID::typesNotEqual, 4);
ExpectError(R"(Fi1,2[X1,{X1}](X1*X1))", SemanticEID::typesNotEqual, 9);
ExpectError(R"(Fi1,2[X1*{X1}](B(X1)*X1))", SemanticEID::typesNotEqual, 6); ExpectError(R"(Fi1,2[X1*{X1}](B(X1)*X1))", SemanticEID::typesNotEqual, 6);
ExpectError(R"(Fi1,2,1[X1, X1](X1*X1))", SemanticEID::invalidFilterArity, 0); ExpectError(R"(Fi1,2,1[X1, X1](X1*X1))", SemanticEID::invalidFilterArity, 0);
ExpectError(R"(\A a \in X1 Fi1[a](B(X1)*X1) \eq X1)", SemanticEID::typesNotEqual, 16); ExpectError(R"(\A a \in X1 Fi1[a](B(X1)*X1) \eq X1)", SemanticEID::typesNotEqual, 16);

View File

@ -19,11 +19,17 @@ Here we write upgrading notes. Make them as straightforward as possible.
### Fixed ### Fixed
## [0.1.12] - 2024-12-03
### Fixed
- Fix multi filter typification check
## [0.1.11] - 2024-10-17 ## [0.1.11] - 2024-10-17
- Allow enumeration in structure definition ### Fixed
### Changed - Allow enumeration in structure definition
## [0.1.10] - 2024-09-25 ## [0.1.10] - 2024-09-25

View File

@ -1 +1 @@
0.1.11 0.1.12