From cce1fa0c9050752de01815a7fd2bcf406a882e42 Mon Sep 17 00:00:00 2001 From: Hugo Saint-Vignes Date: Fri, 17 Jul 2020 12:10:57 +0200 Subject: [PATCH] [poincare/test] Add tests for LCM and GCD Change-Id: If91c1ef863c9810e1ab87525a5ed2b4c7ed45656 --- poincare/test/approximation.cpp | 12 ++++++++++++ poincare/test/arithmetic.cpp | 14 ++++++++++++++ poincare/test/simplification.cpp | 9 +++++++++ 3 files changed, 35 insertions(+) diff --git a/poincare/test/approximation.cpp b/poincare/test/approximation.cpp index d8ab186ae..b1307d595 100644 --- a/poincare/test/approximation.cpp +++ b/poincare/test/approximation.cpp @@ -282,6 +282,12 @@ QUIZ_CASE(poincare_approximation_function) { assert_expression_approximates_to("gcd(-234,394)", "2"); assert_expression_approximates_to("gcd(234,-394)", "2"); assert_expression_approximates_to("gcd(-234,-394)", "2"); + assert_expression_approximates_to("gcd(-234,-394, -16)", "2"); + assert_expression_approximates_to("gcd(-234,-394, -16)", "2"); + assert_expression_approximates_to("gcd(6,15,10)", "1"); + assert_expression_approximates_to("gcd(6,15,10)", "1"); + assert_expression_approximates_to("gcd(30,105,70,42)", "1"); + assert_expression_approximates_to("gcd(30,105,70,42)", "1"); assert_expression_approximates_to("im(2+3𝐢)", "3"); assert_expression_approximates_to("im(2+3𝐢)", "3"); @@ -291,6 +297,12 @@ QUIZ_CASE(poincare_approximation_function) { assert_expression_approximates_to("lcm(-234,394)", "46098"); assert_expression_approximates_to("lcm(234,-394)", "46098"); assert_expression_approximates_to("lcm(-234,-394)", "46098"); + assert_expression_approximates_to("lcm(-234,-394, -16)", "368784"); + assert_expression_approximates_to("lcm(-234,-394, -16)", "368784"); + assert_expression_approximates_to("lcm(6,15,10)", "30"); + assert_expression_approximates_to("lcm(6,15,10)", "30"); + assert_expression_approximates_to("lcm(30,105,70,42)", "210"); + assert_expression_approximates_to("lcm(30,105,70,42)", "210"); assert_expression_approximates_to("int(x,x, 1, 2)", "1.5"); assert_expression_approximates_to("int(x,x, 1, 2)", "1.5"); diff --git a/poincare/test/arithmetic.cpp b/poincare/test/arithmetic.cpp index d8a9ad9c7..36a268b5e 100644 --- a/poincare/test/arithmetic.cpp +++ b/poincare/test/arithmetic.cpp @@ -22,6 +22,13 @@ void assert_gcd_equals_to(Integer a, Integer b, Integer c) { fill_buffer_with(failInformationBuffer, bufferSize, "gcd(", args, 2); Integer gcd = Arithmetic::GCD(a, b); quiz_assert_print_if_failure(gcd.isEqualTo(c), failInformationBuffer); + if (a.isExtractable() && b.isExtractable()) { + // Test Arithmetic::GCD(int, int) if possible + a.setNegative(false); + b.setNegative(false); + int extractedGcd = Arithmetic::GCD(a.extractedInt(), b.extractedInt()); + quiz_assert_print_if_failure(extractedGcd == c.extractedInt(), failInformationBuffer); + } } void assert_lcm_equals_to(Integer a, Integer b, Integer c) { @@ -31,6 +38,13 @@ void assert_lcm_equals_to(Integer a, Integer b, Integer c) { fill_buffer_with(failInformationBuffer, bufferSize, "lcm(", args, 2); Integer lcm = Arithmetic::LCM(a, b); quiz_assert_print_if_failure(lcm.isEqualTo(c), failInformationBuffer); + if (a.isExtractable() && b.isExtractable()) { + // Test Arithmetic::LCM(int, int) if possible + a.setNegative(false); + b.setNegative(false); + int extractedLcm = Arithmetic::LCM(a.extractedInt(), b.extractedInt()); + quiz_assert_print_if_failure(extractedLcm == c.extractedInt(), failInformationBuffer); + } } void assert_prime_factorization_equals_to(Integer a, int * factors, int * coefficients, int length) { diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index 4e3c9cfaa..27b796303 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -391,6 +391,7 @@ QUIZ_CASE(poincare_simplification_units) { assert_parsed_expression_simplify_to("frac(_s)", "undef"); assert_parsed_expression_simplify_to("gcd(1,_s)", "undef"); assert_parsed_expression_simplify_to("gcd(_s,1)", "undef"); + assert_parsed_expression_simplify_to("gcd(1,2,3,_s)", "undef"); assert_parsed_expression_simplify_to("identity(_s)", "undef"); assert_parsed_expression_simplify_to("im(_s)", "undef"); assert_parsed_expression_simplify_to("int(_s,x,0,1)", "undef"); @@ -405,6 +406,7 @@ QUIZ_CASE(poincare_simplification_units) { assert_parsed_expression_simplify_to("inverse(_s)", "undef"); assert_parsed_expression_simplify_to("lcm(1,_s)", "undef"); assert_parsed_expression_simplify_to("lcm(_s,1)", "undef"); + assert_parsed_expression_simplify_to("lcm(1,2,3,_s)", "undef"); assert_parsed_expression_simplify_to("ln(_s)", "undef"); assert_parsed_expression_simplify_to("log(_s)", "undef"); assert_parsed_expression_simplify_to("log(_s,2)", "undef"); @@ -638,9 +640,11 @@ QUIZ_CASE(poincare_simplification_function) { assert_parsed_expression_simplify_to("frac(-1.3)", "7/10"); assert_parsed_expression_simplify_to("gcd(123,278)", "1"); assert_parsed_expression_simplify_to("gcd(11,121)", "11"); + assert_parsed_expression_simplify_to("gcd(56,112,28,91)", "7"); assert_parsed_expression_simplify_to("im(1+5×𝐢)", "5"); assert_parsed_expression_simplify_to("lcm(123,278)", "34194"); assert_parsed_expression_simplify_to("lcm(11,121)", "121"); + assert_parsed_expression_simplify_to("lcm(11,121, 3)", "363"); assert_parsed_expression_simplify_to("√(4)", "2"); assert_parsed_expression_simplify_to("re(1+5×𝐢)", "1"); assert_parsed_expression_simplify_to("root(4,3)", "root(4,3)"); @@ -1008,6 +1012,7 @@ QUIZ_CASE(poincare_simplification_functions_of_matrices) { assert_parsed_expression_simplify_to("gcd([[0,180]],1)", Undefined::Name()); assert_parsed_expression_simplify_to("gcd(1,[[0,180]])", Undefined::Name()); assert_parsed_expression_simplify_to("gcd([[0,180]],[[1]])", Undefined::Name()); + assert_parsed_expression_simplify_to("gcd(1,2,[[1]])", Undefined::Name()); assert_parsed_expression_simplify_to("acosh([[0,π]])", "[[acosh(0),acosh(π)]]"); assert_parsed_expression_simplify_to("asinh([[0,π]])", "[[0,asinh(π)]]"); assert_parsed_expression_simplify_to("atanh([[0,π]])", "[[0,atanh(π)]]"); @@ -1206,9 +1211,13 @@ QUIZ_CASE(poincare_simplification_complex_format) { assert_parsed_expression_simplify_to("floor(x)", "floor(x)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("frac(x)", "frac(x)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("gcd(x,y)", "gcd(x,y)", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("gcd(x,gcd(y,z))", "gcd(x,y,z)", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("gcd(3, 1, 2, x, x^2)", "gcd(x^2,x,3,2,1)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("im(1+𝐢)", "1", User, Radian, Cartesian); assert_parsed_expression_simplify_to("int(x^2, x, 1, 2)", "int(x^2,x,1,2)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("lcm(x,y)", "lcm(x,y)", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("lcm(x,lcm(y,z))", "lcm(x,y,z)", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("lcm(3, 1, 2, x, x^2)", "lcm(x^2,x,3,2,1)", User, Radian, Cartesian); // TODO: dim is not simplified yet //assert_parsed_expression_simplify_to("dim(x)", "dim(x)", User, Radian, Cartesian);