Milena (Olena)  User documentation 2.0a Id
floatings.cc
00001 // Copyright (C) 2010, 2011 EPITA Research and Development Laboratory
00002 // (LRDE)
00003 //
00004 // This file is part of Olena.
00005 //
00006 // Olena is free software: you can redistribute it and/or modify it under
00007 // the terms of the GNU General Public License as published by the Free
00008 // Software Foundation, version 2 of the License.
00009 //
00010 // Olena is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 // As a special exception, you may use this file as part of a free
00019 // software project without restriction.  Specifically, if other files
00020 // instantiate templates or use macros or inline functions from this
00021 // file, or you compile this file and link it with other files to produce
00022 // an executable, this file does not by itself cause the resulting
00023 // executable to be covered by the GNU General Public License.  This
00024 // exception does not however invalidate any other reasons why the
00025 // executable file might be covered by the GNU General Public License.
00026 
00027 #include <mln/value/ops.hh>
00028 #include <mln/value/builtin/floatings.hh>
00029 
00030 int main()
00031 {
00032   // Checking sum value type name.
00033   mln_assertion(mln_trait_value_name(mln_sum_product_(float, float)) == std::string("float"));
00034   mln_assertion(mln_trait_value_name(mln_sum_product_(double, double)) == std::string("double"));
00035 
00036   // Make sure we return the minimum negative value but not the
00037   // minimum positive value.
00038   mln_assertion(mln_min(float) < 0.);
00039   mln_assertion(mln_min(double) < 0.);
00040 
00041   // Make sure the sum value type does not alter precision.
00042   {
00043     float a = mln_max(float) / 3,
00044       b = mln_max(float) / 3;
00045     volatile float c = a + b;
00046     volatile mln_sum_product_(float, float) d = a + b;
00047     mln_assertion(c == d);
00048   }
00049   {
00050     double a = mln_max(double) / 3,
00051       b = mln_max(double) / 3;
00052     volatile double c = a + b;
00053     volatile mln_sum_product_(double, double) d = a + b;
00054     mln_assertion(c == d);
00055   }
00056 }
 All Classes Namespaces Functions Variables Typedefs Enumerator