susumu.yata
null+****@clear*****
Thu Nov 6 16:32:37 JST 2014
susumu.yata 2014-11-06 16:32:37 +0900 (Thu, 06 Nov 2014) New Revision: 14fc33b0b8c85da483eadd34bc222a18cf82e9ff https://github.com/groonga/grnxx/commit/14fc33b0b8c85da483eadd34bc222a18cf82e9ff Message: Add a test for Float. (#99) Modified files: test/test_data_types.cpp Modified: test/test_data_types.cpp (+257 -1) =================================================================== --- test/test_data_types.cpp 2014-11-06 16:06:18 +0900 (ac82948) +++ test/test_data_types.cpp 2014-11-06 16:32:37 +0900 (9112699) @@ -16,6 +16,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include <cassert> +#include <cmath> #include <iostream> #include "grnxx/data_types.hpp" @@ -455,7 +456,262 @@ void test_int() { } void test_float() { - // TODO + assert(grnxx::Float(0.0).type() == grnxx::FLOAT_DATA); + assert(grnxx::Float::min().type() == grnxx::FLOAT_DATA); + assert(grnxx::Float::max().type() == grnxx::FLOAT_DATA); + assert(grnxx::Float::infinity().type() == grnxx::FLOAT_DATA); + assert(grnxx::Float::na().type() == grnxx::FLOAT_DATA); + + assert(grnxx::Float(0.0).value() == 0.0); + assert(grnxx::Float::min().value() == grnxx::Float::min_value()); + assert(grnxx::Float::max().value() == grnxx::Float::max_value()); + assert(grnxx::Float::infinity().value() == grnxx::Float::infinity_value()); + assert(std::isnan(grnxx::Float::na().value())); + + assert(!grnxx::Float(0.0).is_min()); + assert(grnxx::Float::min().is_min()); + assert(!grnxx::Float::max().is_min()); + assert(!grnxx::Float::infinity().is_min()); + assert(!grnxx::Float::na().is_min()); + + assert(!grnxx::Float(0.0).is_max()); + assert(!grnxx::Float::min().is_max()); + assert(grnxx::Float::max().is_max()); + assert(!grnxx::Float::infinity().is_max()); + assert(!grnxx::Float::na().is_max()); + + assert(grnxx::Float(0.0).is_finite()); + assert(grnxx::Float::min().is_finite()); + assert(grnxx::Float::max().is_finite()); + assert(!grnxx::Float::infinity().is_finite()); + assert(!grnxx::Float::na().is_finite()); + + assert(!grnxx::Float(0.0).is_infinite()); + assert(!grnxx::Float::min().is_infinite()); + assert(!grnxx::Float::max().is_infinite()); + assert(grnxx::Float::infinity().is_infinite()); + assert(!grnxx::Float::na().is_infinite()); + + assert(!grnxx::Float(0.0).is_na()); + assert(!grnxx::Float::min().is_na()); + assert(!grnxx::Float::max().is_na()); + assert(!grnxx::Float::infinity().is_na()); + assert(grnxx::Float::na().is_na()); + + assert(+grnxx::Float(0.0) == grnxx::Float(0.0)); + assert(+grnxx::Float(1.0) == grnxx::Float(1.0)); + assert(+grnxx::Float::min() == grnxx::Float::min()); + assert(+grnxx::Float::max() == grnxx::Float::max()); + assert(+grnxx::Float::infinity().is_infinite()); + assert((+grnxx::Float::na()).is_na()); + + assert(-grnxx::Float(0.0) == grnxx::Float(0.0)); + assert(-grnxx::Float(1.0) == grnxx::Float(-1.0)); + assert(-grnxx::Float::min() == grnxx::Float(-grnxx::Float::min_value())); + assert(-grnxx::Float::max() == grnxx::Float(-grnxx::Float::max_value())); + assert(-grnxx::Float::infinity() == + grnxx::Float(-grnxx::Float::infinity_value())); + assert((-grnxx::Float::na()).is_na()); + + assert((grnxx::Float(1.0) + grnxx::Float(1.0)) == grnxx::Float(2.0)); + assert((grnxx::Float::max() + grnxx::Float::max()).is_infinite()); + assert((grnxx::Float::infinity() + grnxx::Float::min()).is_infinite()); + assert((grnxx::Float::infinity() + -grnxx::Float::infinity()).is_na()); + assert((grnxx::Float(1.0) + grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() + grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::na() + grnxx::Float::na()).is_na()); + + assert((grnxx::Float(1.0) - grnxx::Float(1.0)) == grnxx::Float(0.0)); + assert((grnxx::Float::max() - -grnxx::Float::max()).is_infinite()); + assert((grnxx::Float::infinity() - grnxx::Float::min()).is_infinite()); + assert((grnxx::Float::infinity() - grnxx::Float::infinity()).is_na()); + assert((grnxx::Float(1.0) - grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() - grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::na() - grnxx::Float::na()).is_na()); + + assert((grnxx::Float(2.0) * grnxx::Float(0.5)) == grnxx::Float(1.0)); + assert((grnxx::Float::max() * grnxx::Float::max()).is_infinite()); + assert((grnxx::Float::infinity() * grnxx::Float::min()).is_infinite()); + assert((grnxx::Float::infinity() * grnxx::Float(0.0)).is_na()); + assert((grnxx::Float(1.0) * grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() * grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::na() * grnxx::Float::na()).is_na()); + + grnxx::Float object(1.0); + + assert((object += grnxx::Float(2.0)) == grnxx::Float(3.0)); + assert(object == grnxx::Float(3.0)); + assert((object -= grnxx::Float(1.0)) == grnxx::Float(2.0)); + assert(object == grnxx::Float(2.0)); + assert((object *= grnxx::Float(4.0)) == grnxx::Float(8.0)); + assert(object == grnxx::Float(8.0)); + + object = grnxx::Float(1.0); + + assert((object += grnxx::Float::na()).is_na()); + assert(object.is_na()); + assert((object += grnxx::Float(1.0)).is_na()); + assert(object.is_na()); + + object = grnxx::Float(1.0); + + assert((object -= grnxx::Float::na()).is_na()); + assert(object.is_na()); + assert((object -= grnxx::Float(1.0)).is_na()); + assert(object.is_na()); + + object = grnxx::Float(1.0); + + assert((object *= grnxx::Float::na()).is_na()); + assert(object.is_na()); + assert((object *= grnxx::Float(1.0)).is_na()); + assert(object.is_na()); + + assert((grnxx::Float(1.0) / grnxx::Float(2.0)) == grnxx::Float(0.5)); + assert((grnxx::Float(1.0) / grnxx::Float(0.0)).is_infinite()); + assert((grnxx::Float(1.0) / grnxx::Float::infinity()) == grnxx::Float(0.0)); + assert((grnxx::Float::max() / grnxx::Float::min()).is_infinite()); + assert((grnxx::Float::infinity() / grnxx::Float::max()).is_infinite()); + assert((grnxx::Float::infinity() / grnxx::Float::infinity()).is_na()); + assert((grnxx::Float(0.0) / grnxx::Float(0.0)).is_na()); + assert((grnxx::Float(1.0) / grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() / grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::na() / grnxx::Float::na()).is_na()); + + assert((grnxx::Float(1.0) % grnxx::Float(2.0)) == grnxx::Float(1.0)); + assert((grnxx::Float(1.0) % grnxx::Float(-2.0)) == grnxx::Float(1.0)); + assert((grnxx::Float(-1.0) % grnxx::Float(2.0)) == grnxx::Float(-1.0)); + assert((grnxx::Float(-1.0) % grnxx::Float(-2.0)) == grnxx::Float(-1.0)); + assert((grnxx::Float(1.0) % grnxx::Float::infinity()) == grnxx::Float(1.0)); + assert((grnxx::Float::infinity() % grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::infinity() % grnxx::Float::infinity()).is_na()); + assert((grnxx::Float(0.0) % grnxx::Float(0.0)).is_na()); + assert((grnxx::Float(1.0) % grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() % grnxx::Float(1.0)).is_na()); + assert((grnxx::Float::na() % grnxx::Float::na()).is_na()); + + object = grnxx::Float(13.0); + + assert((object /= grnxx::Float(2.0)) == grnxx::Float(6.5)); + assert(object == grnxx::Float(6.5)); + assert((object %= grnxx::Float(3.0)) == grnxx::Float(0.5)); + assert(object == grnxx::Float(0.5)); + + object = grnxx::Float(1.0); + + assert((object /= grnxx::Float::na()).is_na()); + assert(object.is_na()); + assert((object /= grnxx::Float(1.0)).is_na()); + assert(object.is_na()); + + object = grnxx::Float(1.0); + + assert((object %= grnxx::Float::na()).is_na()); + assert(object.is_na()); + assert((object %= grnxx::Float(1.0)).is_na()); + assert(object.is_na()); + + assert((grnxx::Float::min() == grnxx::Float::min()).is_true()); + assert((grnxx::Float::min() == grnxx::Float::max()).is_false()); + assert((grnxx::Float::min() == grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::min() == grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() == grnxx::Float::min()).is_false()); + assert((grnxx::Float::max() == grnxx::Float::max()).is_true()); + assert((grnxx::Float::max() == grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::max() == grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() == grnxx::Float::min()).is_false()); + assert((grnxx::Float::infinity() == grnxx::Float::max()).is_false()); + assert((grnxx::Float::infinity() == grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::infinity() == grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() == grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() == grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() == grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() == grnxx::Float::na()).is_na()); + + assert((grnxx::Float::min() != grnxx::Float::min()).is_false()); + assert((grnxx::Float::min() != grnxx::Float::max()).is_true()); + assert((grnxx::Float::min() != grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::min() != grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() != grnxx::Float::min()).is_true()); + assert((grnxx::Float::max() != grnxx::Float::max()).is_false()); + assert((grnxx::Float::max() != grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::max() != grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() != grnxx::Float::min()).is_true()); + assert((grnxx::Float::infinity() != grnxx::Float::max()).is_true()); + assert((grnxx::Float::infinity() != grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::infinity() != grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() != grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() != grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() != grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() != grnxx::Float::na()).is_na()); + + assert((grnxx::Float::min() < grnxx::Float::min()).is_false()); + assert((grnxx::Float::min() < grnxx::Float::max()).is_true()); + assert((grnxx::Float::min() < grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::min() < grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() < grnxx::Float::min()).is_false()); + assert((grnxx::Float::max() < grnxx::Float::max()).is_false()); + assert((grnxx::Float::max() < grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::max() < grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() < grnxx::Float::min()).is_false()); + assert((grnxx::Float::infinity() < grnxx::Float::max()).is_false()); + assert((grnxx::Float::infinity() < grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::infinity() < grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() < grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() < grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() < grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() < grnxx::Float::na()).is_na()); + + assert((grnxx::Float::min() > grnxx::Float::min()).is_false()); + assert((grnxx::Float::min() > grnxx::Float::max()).is_false()); + assert((grnxx::Float::min() > grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::min() > grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() > grnxx::Float::min()).is_true()); + assert((grnxx::Float::max() > grnxx::Float::max()).is_false()); + assert((grnxx::Float::max() > grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::max() > grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() > grnxx::Float::min()).is_true()); + assert((grnxx::Float::infinity() > grnxx::Float::max()).is_true()); + assert((grnxx::Float::infinity() > grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::infinity() > grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() > grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() > grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() > grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() > grnxx::Float::na()).is_na()); + + assert((grnxx::Float::min() <= grnxx::Float::min()).is_true()); + assert((grnxx::Float::min() <= grnxx::Float::max()).is_true()); + assert((grnxx::Float::min() <= grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::min() <= grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() <= grnxx::Float::min()).is_false()); + assert((grnxx::Float::max() <= grnxx::Float::max()).is_true()); + assert((grnxx::Float::max() <= grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::max() <= grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() <= grnxx::Float::min()).is_false()); + assert((grnxx::Float::infinity() <= grnxx::Float::max()).is_false()); + assert((grnxx::Float::infinity() <= grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::infinity() <= grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() <= grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() <= grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() <= grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() <= grnxx::Float::na()).is_na()); + + assert((grnxx::Float::min() >= grnxx::Float::min()).is_true()); + assert((grnxx::Float::min() >= grnxx::Float::max()).is_false()); + assert((grnxx::Float::min() >= grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::min() >= grnxx::Float::na()).is_na()); + assert((grnxx::Float::max() >= grnxx::Float::min()).is_true()); + assert((grnxx::Float::max() >= grnxx::Float::max()).is_true()); + assert((grnxx::Float::max() >= grnxx::Float::infinity()).is_false()); + assert((grnxx::Float::max() >= grnxx::Float::na()).is_na()); + assert((grnxx::Float::infinity() >= grnxx::Float::min()).is_true()); + assert((grnxx::Float::infinity() >= grnxx::Float::max()).is_true()); + assert((grnxx::Float::infinity() >= grnxx::Float::infinity()).is_true()); + assert((grnxx::Float::infinity() >= grnxx::Float::na()).is_na()); + assert((grnxx::Float::na() >= grnxx::Float::min()).is_na()); + assert((grnxx::Float::na() >= grnxx::Float::max()).is_na()); + assert((grnxx::Float::na() >= grnxx::Float::infinity()).is_na()); + assert((grnxx::Float::na() >= grnxx::Float::na()).is_na()); } void test_geo_point() { -------------- next part -------------- HTML����������������������������... Télécharger