[poincare] Fix Arithmetic tests

This commit is contained in:
Émilie Feral
2018-08-29 15:22:37 +02:00
parent 23e67c2264
commit efcccb282a
2 changed files with 11 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
#include <poincare/arithmetic.h>
#include <assert.h>
#include <utility>
#include "helper.h"
#if POINCARE_TESTS_PRINT_EXPRESSIONS
#include "../src/expression_debug.h"
@@ -18,7 +19,7 @@ void assert_gcd_equals_to(Integer a, Integer b, Integer c) {
cout << "gcd(" << a.approximate<float>();
cout << ", " << b.approximate<float>() << ") = ";
#endif
Integer gcd = Arithmetic::GCD(&a, &b);
Integer gcd = Arithmetic::GCD(a, b);
#if POINCARE_TESTS_PRINT_EXPRESSIONS
cout << gcd.approximate<float>() << endl;
#endif
@@ -31,7 +32,7 @@ void assert_lcm_equals_to(Integer a, Integer b, Integer c) {
cout << "lcm(" << a.approximate<float>();
cout << ", " << b.approximate<float>() << ") = ";
#endif
Integer lcm = Arithmetic::LCM(&a, &b);
Integer lcm = Arithmetic::LCM(a, b);
#if POINCARE_TESTS_PRINT_EXPRESSIONS
cout << lcm.approximate<float>() << endl;
#endif
@@ -39,13 +40,14 @@ void assert_lcm_equals_to(Integer a, Integer b, Integer c) {
}
void assert_prime_factorization_equals_to(Integer a, int * factors, int * coefficients, int length) {
GlobalContext context;
Integer outputFactors[100];
Integer outputCoefficients[100];
#if POINCARE_TESTS_PRINT_EXPRESSIONS
cout << "---- Primes factorization ----" << endl;
cout << "Decomp(" << a.approximate<float>() << ") = ";
#endif
Arithmetic::PrimeFactorization(&a, outputFactors, outputCoefficients, 10);
Arithmetic::PrimeFactorization(a, outputFactors, outputCoefficients, 10);
#if POINCARE_TESTS_PRINT_EXPRESSIONS
print_prime_factorization(outputFactors, outputCoefficients, 10);
#endif
@@ -57,8 +59,8 @@ void assert_prime_factorization_equals_to(Integer a, int * factors, int * coeffi
* (the relation between integers and their approximation is a surjection,
* however different integers are really likely to have different
* approximations... */
quiz_assert(outputFactors[index].approximate<float>() == Integer(factors[index]).approximate<float>());
quiz_assert(outputCoefficients[index].approximate<float>() == Integer(coefficients[index]).approximate<float>());
quiz_assert(outputFactors[index].approximateToScalar<float>(context, Degree) == Integer(factors[index]).approximateToScalar<float>(context, Degree));
quiz_assert(outputCoefficients[index].approximateToScalar<float>(context, Degree) == Integer(coefficients[index]).approximateToScalar<float>(context, Degree));
}
}
@@ -66,12 +68,12 @@ QUIZ_CASE(poincare_arithmetic) {
assert_gcd_equals_to(Integer(11), Integer(121), Integer(11));
assert_gcd_equals_to(Integer(-256), Integer(321), Integer(1));
assert_gcd_equals_to(Integer(-8), Integer(-40), Integer(8));
assert_gcd_equals_to(Integer("1234567899876543456", true), Integer("234567890098765445678"), Integer(2));
assert_gcd_equals_to(Integer("1234567899876543456"), Integer("234567890098765445678"), Integer(2));
assert_gcd_equals_to(Integer("45678998789"), Integer("1461727961248"), Integer("45678998789"));
assert_lcm_equals_to(Integer(11), Integer(121), Integer(121));
assert_lcm_equals_to(Integer(-31), Integer(52), Integer(1612));
assert_lcm_equals_to(Integer(-8), Integer(-40), Integer(40));
assert_lcm_equals_to(Integer("1234567899876543456", true), Integer("234567890098765445678"), Integer("144794993728852353909143567804987191584"));
assert_lcm_equals_to(Integer("1234567899876543456"), Integer("234567890098765445678"), Integer("144794993728852353909143567804987191584"));
assert_lcm_equals_to(Integer("45678998789"), Integer("1461727961248"), Integer("1461727961248"));
int factors0[5] = {2,3,5,79,1319};
int coefficients0[5] = {2,1,1,1,1};