From 711361781e5e18513d69fc72f8a74a7c31c22ae3 Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:04:24 +0300 Subject: [PATCH] B: Fix typecheck on multi filter --- ccl/rslang/include/ccl/rslang/TypeAuditor.h | 8 +++++--- ccl/rslang/src/TypeAuditor.cpp | 3 +-- ccl/rslang/test/src/testTypeAuditor.cpp | 2 ++ pyconcept/CHANGELOG.md | 10 ++++++++-- pyconcept/VERSION | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ccl/rslang/include/ccl/rslang/TypeAuditor.h b/ccl/rslang/include/ccl/rslang/TypeAuditor.h index da61c45..87afc8a 100644 --- a/ccl/rslang/include/ccl/rslang/TypeAuditor.h +++ b/ccl/rslang/include/ccl/rslang/TypeAuditor.h @@ -18,9 +18,11 @@ public: : context{ context } {} public: - [[nodiscard]] bool CompareTemplated(Typification::Substitutes& substitutes, - const Typification& arg, - const Typification& value); + [[nodiscard]] bool CompareTemplated( + Typification::Substitutes& substitutes, + const Typification& arg, + const Typification& value + ); [[nodiscard]] bool IsArithmetic(const Typification& type) const; [[nodiscard]] bool IsOrdered(const Typification& type) const; [[nodiscard]] std::optional Merge(const Typification& type1, const Typification& type2) const; diff --git a/ccl/rslang/src/TypeAuditor.cpp b/ccl/rslang/src/TypeAuditor.cpp index 63b5f7c..15a4a31 100644 --- a/ccl/rslang/src/TypeAuditor.cpp +++ b/ccl/rslang/src/TypeAuditor.cpp @@ -965,7 +965,7 @@ bool TypeAuditor::ViFilter(Cursor iter) { const auto maybeArgument = ChildType(iter, static_cast(iter.ChildrenCount() - 1)); if (!maybeArgument.has_value()) { return false; - } + } const auto& argument = std::get(maybeArgument.value()); if (argument.IsAnyType() || (argument.IsCollection() && argument.B().Base().IsAnyType())) { return SetCurrent(Typification::EmptySet()); @@ -1008,7 +1008,6 @@ bool TypeAuditor::ViFilter(Cursor iter) { ); return false; } - ++child; // NOLINT(clang-diagnostic-for-loop-analysis) } } else { const auto param = ChildType(iter, 0); diff --git a/ccl/rslang/test/src/testTypeAuditor.cpp b/ccl/rslang/test/src/testTypeAuditor.cpp index b3d4c4b..cf8484d 100644 --- a/ccl/rslang/test/src/testTypeAuditor.cpp +++ b/ccl/rslang/test/src/testTypeAuditor.cpp @@ -347,6 +347,7 @@ TEST_F(UTTypeAuditor, TypedOperationsCorrect) { ExpectTypification(R"(Pr1(S1))", "B(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](X1*X1))", "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}](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"(Fi3[X1](X1*X1))", SemanticEID::invalidFilterArgumentType, 8); 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,1[X1, X1](X1*X1))", SemanticEID::invalidFilterArity, 0); ExpectError(R"(\A a \in X1 Fi1[a](B(X1)*X1) \eq X1)", SemanticEID::typesNotEqual, 16); diff --git a/pyconcept/CHANGELOG.md b/pyconcept/CHANGELOG.md index 2c0b721..d380f14 100644 --- a/pyconcept/CHANGELOG.md +++ b/pyconcept/CHANGELOG.md @@ -19,11 +19,17 @@ Here we write upgrading notes. Make them as straightforward as possible. ### Fixed +## [0.1.12] - 2024-12-03 + +### Fixed + +- Fix multi filter typification check + ## [0.1.11] - 2024-10-17 -- Allow enumeration in structure definition +### Fixed -### Changed +- Allow enumeration in structure definition ## [0.1.10] - 2024-09-25 diff --git a/pyconcept/VERSION b/pyconcept/VERSION index a34eaa5..6a36bb4 100644 --- a/pyconcept/VERSION +++ b/pyconcept/VERSION @@ -1 +1 @@ -0.1.11 \ No newline at end of file +0.1.12 \ No newline at end of file