From cf8bc636a7bed44c762b9b4a4398ba1f384eeb42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 14 Aug 2018 18:20:53 +0200 Subject: [PATCH] [poincare] Add Integer tests --- poincare/test/integer.cpp | 117 +++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 41 deletions(-) diff --git a/poincare/test/integer.cpp b/poincare/test/integer.cpp index 1f006e3c0..acb4183a3 100644 --- a/poincare/test/integer.cpp +++ b/poincare/test/integer.cpp @@ -59,6 +59,25 @@ QUIZ_CASE(poincare_integer_compare) { //FIXME: assert(Integer("0b1011") == Integer(11)); } +QUIZ_CASE(poincare_integer_properties) { + assert(Integer(0).isZero()); + assert(!Integer(-1).isZero()); + assert(!Integer(1).isZero()); + assert(Integer(1).isOne()); + assert(!Integer(-1).isOne()); + assert(!Integer(0).isOne()); + assert(Integer("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216").isInfinity()); // 2^32^k_maxNumberOfDigits + assert(!Integer("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215").isInfinity()); // 2^32^k_maxNumberOfDigits-1 + assert(!Integer(0).isInfinity()); + assert(Integer(8).isEven()); + assert(!Integer(7).isEven()); + assert(Integer(-8).isEven()); + assert(!Integer(-7).isEven()); + assert(!Integer(2).isNegative()); + assert(Integer(-2).isNegative()); + //assert(Integer::NumberOfBase10Digits(Integer("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215")) == 308); +} + static inline void assert_add_to(const Integer i, const Integer j, const Integer k) { assert(Integer::NaturalOrder(Integer::Addition(i, j), k) == 0); } @@ -164,50 +183,66 @@ QUIZ_CASE(poincare_integer_divide) { assert_div_to(Integer("0"), Integer("-10"), Integer("0"), Integer("0")); assert_div_to(Integer("0"), Integer("-123456789098760"), Integer("0"), Integer("0")); assert_div_to(Integer("2305843009213693952"), Integer("2305843009213693921"), Integer("1"), Integer("31")); + //assert_div_to(Integer("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216"), Integer("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216"), Integer(1), Integer(0)); } -#if 0 -template -void assert_integer_evals_to(const char * i, bool negative, T result) { - assert(Integer(i, negative).approximate() == result); +static inline void assert_pow_to(const Integer i, const Integer j, const Integer k) { + assert(Integer::NaturalOrder(Integer::Power(i, j), k) == 0); +} + +QUIZ_CASE(poincare_integer_pow) { + assert_pow_to(Integer(2), Integer(2), Integer(4)); + assert_pow_to(Integer("12345678910111213141516171819202122232425"), Integer(2), Integer("152415787751564791571474464067365843004067618915106260955633159458990465721380625")); +} + + +// Simplify +template +void assert_integer_evals_to(const char * i, T result) { + GlobalContext c; + assert(Integer(i).approximateToScalar(c, Preferences::AngleUnit::Radian) == result); } -#endif QUIZ_CASE(poincare_integer_evaluate) { -#if 0 - assert_integer_evals_to("1", false, 1.0f); - assert_integer_evals_to("1", false, 1.0); - assert_integer_evals_to("12345678", false, 12345678.0f); - assert_integer_evals_to("12345678", false, 12345678.0); - assert_integer_evals_to("0", false, 0.0f); - assert_integer_evals_to("0", false, 0.0); - assert_integer_evals_to("0", true, 0.0f); - assert_integer_evals_to("0", true, 0.0); - assert_integer_evals_to("1", true, -1.0f); - assert_integer_evals_to("1", true, -1.0); - assert_integer_evals_to("12345678", false, 12345678.0f); - assert_integer_evals_to("12345678", false, 12345678.0); - assert_integer_evals_to("4294967295", false, 4294967295.0f); - assert_integer_evals_to("4294967295", false, 4294967295.0); - assert_integer_evals_to("4294967296", true, -4294967296.0f); - assert_integer_evals_to("4294967296", true, -4294967296.0); - assert_integer_evals_to("2147483648", false, 2147483648.0f); - assert_integer_evals_to("2147483648", false, 2147483648.0); - assert_integer_evals_to("18446744073709551615", true, -18446744073709551615.0f); - assert_integer_evals_to("18446744073709551615", true, -18446744073709551615.0); - assert_integer_evals_to("18446744073709551616", true, -18446744073709551616.0f); - assert_integer_evals_to("18446744073709551616", true, -18446744073709551616.0); - assert_integer_evals_to("92233720372036854775808", false, 92233720372036854775808.0f); - assert_integer_evals_to("92233720372036854775808", false, 92233720372036854775808.0); - assert_integer_evals_to("134217720", false, 134217720.0f); - assert_integer_evals_to("134217720", false, 134217720.0); - assert_integer_evals_to("67108864", false, 67108864.0f); - assert_integer_evals_to("67108864", false, 67108864.0); - assert_integer_evals_to("33554432", false, 33554432.0f); - assert_integer_evals_to("33554432", false, 33554432.0); - assert_integer_evals_to("2", false, 2.0f); - assert_integer_evals_to("2", false, 2.0); - assert_integer_evals_to("4", false, 4.0f); - assert_integer_evals_to("4", false, 4.0); -#endif + assert_integer_evals_to("1", 1.0f); + assert_integer_evals_to("1", 1.0); + assert_integer_evals_to("12345678", 12345678.0f); + assert_integer_evals_to("12345678", 12345678.0); + assert_integer_evals_to("0", 0.0f); + assert_integer_evals_to("0", 0.0); + assert_integer_evals_to("-0", 0.0f); + assert_integer_evals_to("-0", 0.0); + assert_integer_evals_to("-1", -1.0f); + assert_integer_evals_to("-1", -1.0); + assert_integer_evals_to("12345678", 12345678.0f); + assert_integer_evals_to("12345678", 12345678.0); + assert_integer_evals_to("4294967295", 4294967295.0f); + assert_integer_evals_to("4294967295", 4294967295.0); + assert_integer_evals_to("-4294967296", -4294967296.0f); + assert_integer_evals_to("-4294967296", -4294967296.0); + assert_integer_evals_to("2147483648", 2147483648.0f); + assert_integer_evals_to("2147483648", 2147483648.0); + assert_integer_evals_to("-18446744073709551615", -18446744073709551615.0f); + assert_integer_evals_to("-18446744073709551615", -18446744073709551615.0); + assert_integer_evals_to("-18446744073709551616", -18446744073709551616.0f); + assert_integer_evals_to("-18446744073709551616", -18446744073709551616.0); + assert_integer_evals_to("92233720372036854775808", 92233720372036854775808.0f); + assert_integer_evals_to("92233720372036854775808", 92233720372036854775808.0); + assert_integer_evals_to("134217720", 134217720.0f); + assert_integer_evals_to("134217720", 134217720.0); + assert_integer_evals_to("67108864", 67108864.0f); + assert_integer_evals_to("67108864", 67108864.0); + assert_integer_evals_to("33554432", 33554432.0f); + assert_integer_evals_to("33554432", 33554432.0); + assert_integer_evals_to("2", 2.0f); + assert_integer_evals_to("2", 2.0); + assert_integer_evals_to("4", 4.0f); + assert_integer_evals_to("4", 4.0); + assert_integer_evals_to("179769313486230000002930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215", 1.7976931348622999E+308); + assert_integer_evals_to("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216.0); + assert_integer_evals_to("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215", 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215.0); } + +//Layout +// +//SErialize