From b466827956f51d3e27810043412afec688329143 Mon Sep 17 00:00:00 2001 From: Matthew McCall Date: Fri, 18 Apr 2025 14:50:50 -0400 Subject: [PATCH 1/3] Add support for MathML serialization of integrals Enhanced the MathMLSerializer to handle integrals by including proper Unicode symbols. Added corresponding unit tests to validate the serialization output for integral expressions. --- io/src/MathMLSerializer.cpp | 2 +- io/tests/MathMLTests.cpp | 42 +++++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/io/src/MathMLSerializer.cpp b/io/src/MathMLSerializer.cpp index 7ae1a710..987cca00 100644 --- a/io/src/MathMLSerializer.cpp +++ b/io/src/MathMLSerializer.cpp @@ -383,7 +383,7 @@ auto MathMLSerializer::TypedVisit(const Integral<>& integral) -> RetT // Integral symbol tinyxml2::XMLElement* inte = doc.NewElement("mo"); - inte->SetText("∫"); + inte->SetText(reinterpret_cast(u8"\u222B")); tinyxml2::XMLElement* dNode = doc.NewElement("mo"); dNode->SetText("d"); diff --git a/io/tests/MathMLTests.cpp b/io/tests/MathMLTests.cpp index 2b0e5ccc..526571be 100644 --- a/io/tests/MathMLTests.cpp +++ b/io/tests/MathMLTests.cpp @@ -2,6 +2,7 @@ #include "Oasis/Add.hpp" #include "Oasis/Divide.hpp" +#include "Oasis/Integral.hpp" #include "Oasis/Multiply.hpp" #include "Oasis/Matrix.hpp" #include "Oasis/Variable.hpp" @@ -238,14 +239,33 @@ TEST_CASE("Matrix to MathML 3x2", "[Matrix][MathML]") // std::cout<(u8R"( + + 1 + + d + x + + +)"); + + REQUIRE(expected == mathml); +} \ No newline at end of file From 0f972eb12b344f42c8ac1834154c517fccd61ab0 Mon Sep 17 00:00:00 2001 From: Matthew McCall Date: Fri, 18 Apr 2025 15:03:59 -0400 Subject: [PATCH 2/3] Add test for parsing and serializing integrals This adds a new test case to verify the parsing and serialization of integrals using the `Oasis` library. It ensures that integral expressions are correctly converted to MathML string representations. --- bindings/js/tests/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bindings/js/tests/index.ts b/bindings/js/tests/index.ts index b7d51e2c..c474c090 100644 --- a/bindings/js/tests/index.ts +++ b/bindings/js/tests/index.ts @@ -8,4 +8,19 @@ test("Addition of Real Numbers", async () => { const addResult = Oasis.Simplify(add); const addResultStr = Oasis.ToMathMLString(addResult); assert.equal(addResultStr, "4\n"); +}); + +test("Parsing and Serializing of Integrals", async () => { + const Oasis = await loadOasis(); + const integral = Oasis.FromInFix("in ( 1 , x )"); + const integralML = Oasis.ToMathMLString(integral); + assert.equal(integralML, ` + + 1 + + d + x + + +`); }); \ No newline at end of file From b61e3348ad88f5f5ffc2bf9b0d1c2074f049820f Mon Sep 17 00:00:00 2001 From: Matthew McCall Date: Fri, 18 Apr 2025 15:07:03 -0400 Subject: [PATCH 3/3] Ran clang format --- io/src/MathMLSerializer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io/src/MathMLSerializer.cpp b/io/src/MathMLSerializer.cpp index 987cca00..ca3823b0 100644 --- a/io/src/MathMLSerializer.cpp +++ b/io/src/MathMLSerializer.cpp @@ -383,7 +383,7 @@ auto MathMLSerializer::TypedVisit(const Integral<>& integral) -> RetT // Integral symbol tinyxml2::XMLElement* inte = doc.NewElement("mo"); - inte->SetText(reinterpret_cast(u8"\u222B")); + inte->SetText(reinterpret_cast(u8"\u222B")); tinyxml2::XMLElement* dNode = doc.NewElement("mo"); dNode->SetText("d");