src/core/test/int64x64-test-suite.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Sun, 02 Mar 2014 01:02:23 -0800
changeset 10637 67601c471c22
parent 10611 5390474ca6b7
child 10661 06fbdb895376
permissions -rw-r--r--
[Bug 1856] int64x64_t double conversions
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "ns3/int64x64.h"
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "ns3/test.h"
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
     4
#include <cmath>    // fabs
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
     5
#include <iomanip>
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
     6
#include <limits>   // numeric_limits<>::epsilon ()
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
     7
9079
1e5921e6507d Clean up core, network, internet, point-to-point tests that don't access private class attributes and methods in accordance to sample-test-suite.cc.
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
     8
using namespace ns3;
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    10
namespace ns3 {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    11
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    12
  namespace int64x64 {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    13
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    14
    namespace test {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    15
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    16
/**
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    17
 * \class ns3::int64x64::Int64x64TestSuite
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    18
 * \internal
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    19
 *
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    20
 * Some of these tests are a little unusual for ns-3 in that they
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    21
 * are sensitive to implementation, specifically the resolution
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    22
 * of the double and long double implementations.
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    23
 * 
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    24
 * To handle this, where needed we define a tolerance to use in the
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    25
 * test comparisions.  If you need to increase the tolerance,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    26
 * please append the system and compiler version.  For example:
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    27
 *
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    28
 * \code
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    29
 *   // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    30
 *   tolerance = 1;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    31
 *   // System Foo gcc 3.9
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    32
 *   tolerance = 3;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    33
 * \endcode
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    34
 */
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    35
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    36
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    37
class Printer
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    38
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    39
public:
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    40
  Printer (const int64_t high, const uint64_t low)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    41
    : m_haveInt (false),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    42
      m_value (0),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    43
      m_high (high),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    44
      m_low (low)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    45
  { }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    46
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    47
  Printer (const int64x64_t value)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    48
    : m_haveInt (true),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    49
      m_value (value),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    50
      m_high (value.GetHigh ()),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    51
      m_low (value.GetLow ())
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    52
  { }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    53
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    54
private:
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    55
  friend std::ostream & operator << (std::ostream & os, const Printer & p);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    56
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    57
  bool       m_haveInt;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    58
  int64x64_t m_value;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    59
  int64_t    m_high;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    60
  uint64_t   m_low;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    61
};
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    62
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    63
std::ostream & operator << (std::ostream & os, const Printer & p)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    64
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    65
  if (p.m_haveInt)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    66
    {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    67
      os << std::fixed << std::setprecision (22)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    68
	 << p.m_value;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    69
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    70
    }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    71
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    72
  os << std::hex  << std::setfill ('0')
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    73
     << " (0x" << std::setw (16) << p.m_high
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    74
     << " 0x"  << std::setw (16) << p.m_low  << ")"
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    75
     << std::dec  << std::setfill (' ');
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    76
  return os;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    77
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    78
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    79
	      
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    80
class Int64x64HiLoTestCase : public TestCase
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
public:
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    83
  Int64x64HiLoTestCase ();
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  virtual void DoRun (void);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    85
  void Check (const int64_t hi, const uint64_t lo);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    88
Int64x64HiLoTestCase::Int64x64HiLoTestCase ()
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    89
  : TestCase ("Manipulate the high and low part of every number")
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
}
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    92
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    93
void 
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    94
Int64x64HiLoTestCase::Check (const int64_t hi, const uint64_t lo)
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
    96
  uint64_t tolerance = 0;
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    97
  if (int64x64_t::implementation == int64x64_t::ld_impl)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    98
    {
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
    99
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   100
      tolerance = 1;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   101
    }
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   102
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   103
  int64x64_t value = int64x64_t (hi,lo);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   104
  uint64_t vLow = value.GetLow ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   105
  bool pass = ( (value.GetHigh () == hi)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   106
		&& ( (Max (vLow, lo) - Min (vLow, lo)) <= tolerance)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   107
		);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   108
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   109
  std::cout << GetParent ()->GetName () << " Check: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   110
	    << (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   111
	    << Printer (value) << " from" << Printer (hi, lo)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   112
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   113
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   114
  NS_TEST_EXPECT_MSG_EQ (value.GetHigh (), hi,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   115
			 "High part does not match for hi:" << hi
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   116
			 << " lo: " << lo);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   117
  NS_TEST_EXPECT_MSG_EQ_TOL ((int64_t)vLow, (int64_t)lo, (int64_t)tolerance,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   118
			     "Low part does not match for hi: " << hi
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   119
			     << " lo: " << lo);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   120
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   121
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   122
void
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   123
Int64x64HiLoTestCase::DoRun (void)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   124
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   125
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   126
  std::cout << GetParent ()->GetName () << " Check: " << GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   127
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   128
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   129
  uint64_t low = 1;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   130
  if (int64x64_t::implementation == int64x64_t::ld_impl)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   131
    {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   132
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   133
      low = 2 * HP_MAX_64 * std::numeric_limits<long double>::epsilon ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   134
    }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   135
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   136
  Check ( 0, 0);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   137
  Check ( 0, low);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   138
  Check ( 0, 0xffffffffffffffffULL - low);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   139
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   140
  Check ( 1, 0);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   141
  Check ( 1, low);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   142
  Check ( 1, 0xffffffffffffffffULL - low);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   143
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   144
  Check (-1, 0);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   145
  Check (-1, low);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   146
  Check (-1, 0xffffffffffffffffULL - low);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
class Int64x64InputTestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
  Int64x64InputTestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   155
  void Check (const std::string & str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   156
	      const int64_t hi, const uint64_t lo,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   157
	      const int64_t tolerance = 0);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
Int64x64InputTestCase::Int64x64InputTestCase ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   160
  : TestCase ("Parse int64x64_t numbers as strings")
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
void 
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   164
Int64x64InputTestCase::Check (const std::string & str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   165
			      const int64_t hi, const uint64_t lo,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   166
			      const int64_t tolerance /* = 0 */)
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   167
			      
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
  std::istringstream iss;
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
  iss.str (str);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   171
  int64x64_t value;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   172
  iss >> value;
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   173
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   174
  std::string input = "\"" + str + "\"";
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   175
  uint64_t vLow = value.GetLow ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   176
  bool pass = ( (value.GetHigh () == hi) &&
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   177
		( Max (vLow, lo) - Min (vLow, lo) <= tolerance)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   178
		);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   179
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   180
  std::cout << GetParent ()->GetName () << " Input: "
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   181
	    << (pass ? "pass " : "FAIL ")
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   182
	    << std::left << std::setw (28) << input << std::right
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   183
	    << Printer (value) 
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   184
	    << " expected: " << Printer (hi, lo) << " +/- " << tolerance
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   185
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   186
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   187
  NS_TEST_EXPECT_MSG_EQ (value.GetHigh (), hi,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   188
			 "High parts do not match for input string \""
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   189
			 << str << "\"");
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   190
  NS_TEST_EXPECT_MSG_EQ_TOL ((int64_t)value.GetLow (), (int64_t)lo, tolerance,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   191
			     "Low parts do not match for input string \""
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   192
			     << str << "\"");
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
void
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
Int64x64InputTestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   197
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   198
  std::cout << GetParent ()->GetName () << " Input: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   199
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   200
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   201
  int64_t tolerance = 0;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   202
  if (int64x64_t::implementation == int64x64_t::ld_impl)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   203
    {
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   204
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   205
      tolerance = 2;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   206
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   207
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   208
  Check ("1", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   209
  Check ("+1", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   210
  Check ("-1", -1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   211
  Check ("1.0", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   212
  Check ("+1.0", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   213
  Check ("001.0", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   214
  Check ("+001.0", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   215
  Check ("020.0", 20, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   216
  Check ("+020.0", 20, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   217
  Check ("1.0000000", 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   218
  Check ("-1.0", -1, 0, tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   219
  Check ("-1.0000", -1, 0, tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   220
  Check (" 1.000000000000000000054",  1, 1, tolerance);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   221
  Check ("-1.000000000000000000054", -2, -1, tolerance);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   224
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
class Int64x64InputOutputTestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
  Int64x64InputOutputTestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   230
  void Check (const std::string & str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   231
	      const int64_t tolerance = 0);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
Int64x64InputOutputTestCase::Int64x64InputOutputTestCase ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   234
  : TestCase ("Roundtrip int64x64_t numbers as strings")
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
void 
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   238
Int64x64InputOutputTestCase::Check (const std::string & str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   239
				    const int64_t tolerance /* = 0 */)
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   241
  std::stringstream iss (str);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   242
  int64x64_t expect;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   243
  iss >> expect;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   244
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   245
  std::stringstream oss;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   246
  oss << std::scientific << std::setprecision (21) << expect;
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
  int64x64_t value;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   248
  oss >> value;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   249
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   250
  bool pass = Abs (value - expect) <= int64x64_t (0, tolerance + 1);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   251
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   252
  std::string input  = "\"" + str + "\"";
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   253
  std::string output = "\"" + oss.str () + "\"";
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   254
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   255
  if (pass)
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   256
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   257
      std::cout << GetParent ()->GetName () << " InputOutput: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   258
		<< (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   259
		<< " in:  " << std::left << std::setw (28) << input
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   260
		<< " out: " << std::left << std::setw (28) << output
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   261
		<< std::right
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   262
		<< std::endl;
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   263
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   264
  else
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   265
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   266
      std::cout << GetParent ()->GetName () << " InputOutput: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   267
		<< (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   268
		<< " in:  " << std::left << std::setw (28) << input
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   269
		<< std::right << Printer (expect)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   270
		<< std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   271
      std::cout << GetParent ()->GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   272
		<< std::setw (19) << " "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   273
		<< " out: " << std::left << std::setw (28) << output
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   274
		<< std::right << Printer (value)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   275
		<< std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   276
    }      
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   277
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   278
  NS_TEST_EXPECT_MSG_EQ_TOL (value, expect, int64x64_t (0, tolerance),
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   279
			     "Converted string does not match expected string");
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
}
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   281
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
void
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
Int64x64InputOutputTestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   285
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   286
  std::cout << GetParent ()->GetName () << " InputOutput: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   287
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   288
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   289
  int64_t tolerance = 0;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   290
  if (int64x64_t::implementation == int64x64_t::ld_impl)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   291
    {
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   292
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   293
      tolerance = 1;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   294
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   295
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   296
  Check ("+1.000000000000000000000");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   297
  Check ("+20.000000000000000000000");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   298
  Check ("+0.000000000000000000000", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   299
  Check ("-1.000000000000000000000", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   300
  Check ("+1.084467440737095516158", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   301
  Check ("-2.084467440737095516158", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   302
  Check ("+3.184467440737095516179", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   303
  Check ("-4.184467440737095516179", tolerance);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
class Int64x64ArithmeticTestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
  Int64x64ArithmeticTestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   312
  void Check (const int        test,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   313
	      const int64x64_t value, const int64x64_t expect);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   314
  void Check (const int        test,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   315
	      const int64x64_t value, const int64x64_t expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   316
	      const int64x64_t tolerance);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
Int64x64ArithmeticTestCase::Int64x64ArithmeticTestCase ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   320
  : TestCase ("Basic arithmetic operations")
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
void
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   324
Int64x64ArithmeticTestCase::Check (const int test,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   325
				   const int64x64_t value,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   326
				   const int64x64_t expect)
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   327
{
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   328
  int64x64_t zero (0,0);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   329
  Check (test, value, expect, zero);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   330
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   331
void
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   332
Int64x64ArithmeticTestCase::Check (const int test,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   333
				   const int64x64_t value,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   334
				   const int64x64_t expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   335
				   const int64x64_t tolerance)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   336
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   337
  bool pass = Abs (value - expect) <= tolerance;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   338
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   339
  std::cout << GetParent ()->GetName () << " Arithmetic: "
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   340
	    << (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   341
	    << test << ": " << value << " == " << expect
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   342
	    << " (+/- " << tolerance << ")"
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   343
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   344
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   345
  NS_TEST_ASSERT_MSG_EQ_TOL ( value, expect, tolerance,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   346
			      "Arithmetic failure in test case " << test);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   347
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   348
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   349
void
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
Int64x64ArithmeticTestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   352
  const int64x64_t tol1 (0, 1);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   353
  const int64x64_t zero (0, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   354
  const int64x64_t one  (1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   355
  const int64x64_t two  (2, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   356
  const int64x64_t thre (3, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   357
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   358
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   359
  std::cout << GetParent ()->GetName () << " Arithmetic: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   360
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   361
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   362
  Check ( 0,   zero  -   zero ,   zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   363
  Check ( 1,   zero  -   one ,   -one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   364
  Check ( 2,   one   -   one ,    zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   365
  Check ( 3,   one   -   two ,   -one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   366
  Check ( 4,   one   - (-one ),   two   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   367
  Check ( 5, (-one ) - (-two ),   one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   368
  Check ( 6, (-one ) -   two ,   -thre  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   369
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   370
  Check ( 7,   zero  +   zero ,   zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   371
  Check ( 8,   zero  +   one ,    one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   372
  Check ( 9,   one   +   one ,    two   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   373
  Check (10,   one   +   two ,    thre  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   374
  Check (11,   one   + (-one ),   zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   375
  Check (12, (-one ) + (-two ),  -thre  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   376
  Check (13, (-one ) +   two ,    one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   377
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   378
  Check (14,   zero  *   zero ,   zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   379
  Check (15,   zero  *   one ,    zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   380
  Check (16,   zero  * (-one ),   zero  );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   381
  Check (17,   one   *   one ,    one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   382
  Check (18,   one   * (-one ),  -one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   383
  Check (19, (-one ) * (-one ),   one   );
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   384
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   385
  Check (20,  (two  * thre ) / thre , two  );
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   387
  const int64x64_t frac  = int64x64_t (0, 0xc000000000000000ULL);  // 0.75
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   388
  const int64x64_t fplf2 = frac + frac * frac;  // 1.3125
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   389
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   390
  Check (21,   frac,              0.75);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   391
  Check (22,   fplf2,             1.3125);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   392
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   393
  const int64x64_t zerof = zero + frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   394
  const int64x64_t onef  = one  + frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   395
  const int64x64_t twof  = two  + frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   396
  const int64x64_t thref = thre + frac;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   397
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   398
  Check (23,   zerof,             frac);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   399
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   400
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   401
  Check (24,   zerof -   zerof,   zero );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   402
  Check (25,   zerof -   onef,   -one  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   403
  Check (26,   onef  -   onef,    zero );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   404
  Check (27,   onef  -   twof,   -one  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   405
  Check (28,   onef  - (-onef),   twof  + frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   406
  Check (29 , (-onef) - (-twof),   one  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   407
  Check (30 , (-onef) -   twof,   -thref - frac  );
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   408
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   409
  Check (31,   zerof +   zerof,   zerof + frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   410
  Check (32,   zerof +   onef,    onef  + frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   411
  Check (33,   onef  +   onef,    twof  + frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   412
  Check (34,   onef  +   twof,    thref + frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   413
  Check (35,   onef  + (-onef),   zero  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   414
  Check (36 , (-onef) + (-twof),  -thref - frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   415
  Check (37, (-onef) +   twof,    one   );
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   416
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   417
  Check (38,   zerof *   zerof,   frac  * frac  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   418
  Check (39 ,   zero  *   onef,    zero  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   419
  Check (40 ,   zerof *   one,     frac  );
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   420
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   421
  Check (41,   zerof *   onef,    fplf2 );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   422
  Check (42,   zerof * (-onef),  -fplf2 );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   423
  Check (43,   onef  *   onef,    onef  + fplf2 );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   424
  Check (44,   onef  * (-onef),  -onef  - fplf2 );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   425
  Check (45, (-onef) * (-onef),   onef  + fplf2 );
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   426
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   427
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   428
  // Multiplication followed by division is exact:
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   429
  Check (46, (two  * thre ) / thre , two  );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   430
  Check (47, (twof * thref) / thref, twof );
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   432
  // Division followed by multiplication loses a bit or two:
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   433
  Check (48, (two  / thre)  * thre,  two , 2 * tol1 );
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   434
  Check (49, (twof / thref) * thref, twof, 3 * tol1 );
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   436
  // The example below shows that we really do not lose
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   437
  // much precision internally: it is almost always the
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
  // final conversion which loses precision.
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   439
  Check (50, (int64x64_t (2000000000) / int64x64_t (3)) * int64x64_t (3),
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   440
	      int64x64_t (1999999999, 0xfffffffffffffffeULL));
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   441
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   442
  // Check special values
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   443
  Check (51,  int64x64_t (0, 0x159fa87f8aeaad21ULL) * 10,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   444
	           int64x64_t (0, 0xd83c94fb6d2ac34aULL));
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   445
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   446
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   447
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   448
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   449
10157
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   450
/**
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   451
 * See \bugid{455}
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   452
 */
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
class Int64x64Bug455TestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   454
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   456
  Int64x64Bug455TestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   458
  void Check (const double result, const double expect,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   459
	      const std::string & msg);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   462
Int64x64Bug455TestCase::Int64x64Bug455TestCase ()
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
  : TestCase ("Test case for bug 455")
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   464
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   465
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
void
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   467
Int64x64Bug455TestCase::Check (const double result, const double expect,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   468
			       const std::string & msg)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   469
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   470
  bool pass = result == expect;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   471
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   472
  std::cout << GetParent ()->GetName () << " Bug 455: "
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   473
	    << (pass ? "pass " : "FAIL ")
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   474
	    << "res: "  << result
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   475
	    << " exp: " << expect
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   476
	    << ": " << msg
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   477
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   478
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   479
  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   480
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   481
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   482
void
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
Int64x64Bug455TestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   484
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   485
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   486
  std::cout << GetParent ()->GetName () << " Bug 455: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   487
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   488
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   489
  int64x64_t a = int64x64_t (0.1);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   490
  a /= int64x64_t (1.25);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   491
  Check (a.GetDouble (), 0.08, "The original testcase");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   492
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   493
  a = int64x64_t (0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   494
  a *= int64x64_t (5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   495
  Check (a.GetDouble (), 2.5, "Simple test for multiplication");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   496
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   497
  a = int64x64_t (-0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
  a *= int64x64_t (5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   499
  Check (a.GetDouble (), -2.5, "Test sign, first operation negative");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   500
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   501
  a = int64x64_t (-0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   502
  a *=int64x64_t (-5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   503
  Check (a.GetDouble (), 2.5, "both operands negative");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   504
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   505
  a = int64x64_t (0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   506
  a *= int64x64_t (-5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   507
  Check (a.GetDouble (), -2.5, "only second operand negative");
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   508
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   509
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   510
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   511
10157
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   512
/**
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   513
 * See \bugid{863}
02e3d2d7d7e1 Link to bug num in bug database with \bugid{num}
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9266
diff changeset
   514
 */
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   515
class Int64x64Bug863TestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   516
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   517
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
  Int64x64Bug863TestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   520
  void Check (const double result, const double expect,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   521
	      const std::string & msg);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   524
Int64x64Bug863TestCase::Int64x64Bug863TestCase ()
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   525
  : TestCase ("Test case for bug 863")
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   526
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   527
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   528
void
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   529
Int64x64Bug863TestCase::Check (const double result, const double expect,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   530
			       const std::string & msg)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   531
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   532
  bool pass = result == expect;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   533
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   534
  std::cout << GetParent ()->GetName () << " Bug 863: "
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   535
	    << (pass ? "pass " : "FAIL ")
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   536
	    << "res: "  << result
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   537
	    << " exp: " << expect
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   538
	    << ": " << msg
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   539
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   540
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   541
  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   542
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   543
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   544
void
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
Int64x64Bug863TestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   546
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   547
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   548
  std::cout << GetParent ()->GetName () << " Bug 863: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   549
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   550
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   551
  int64x64_t a = int64x64_t (0.9);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   552
  a /= int64x64_t (1);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   553
  Check (a.GetDouble (), 0.9, "The original testcase");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   554
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   555
  a = int64x64_t (0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   556
  a /= int64x64_t (0.5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   557
  Check (a.GetDouble (), 1.0, "Simple test for division");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   558
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   559
  a = int64x64_t (-0.5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   560
  Check (a.GetDouble (), -0.5, "Check that we actually convert doubles correctly");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   561
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   562
  a /= int64x64_t (0.5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   563
  Check (a.GetDouble (), -1.0, "first argument negative");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   564
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   565
  a = int64x64_t (0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   566
  a /= int64x64_t (-0.5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   567
  Check (a.GetDouble (), -1.0, "second argument negative");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   568
  
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
  a = int64x64_t (-0.5);
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   570
  a /= int64x64_t (-0.5);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   571
  Check (a.GetDouble (), 1.0, "both arguments negative");
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   572
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   573
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   574
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   575
/**
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   576
 * See \bugid{1786}
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   577
 */
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   578
class Int64x64Bug1786TestCase : public TestCase
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   579
{
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   580
public:
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   581
  Int64x64Bug1786TestCase ();
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   582
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   583
  void Check (const uint64_t low, const std::string & value,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   584
	      const int64_t tolerance = 0);
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   585
};
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   586
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   587
Int64x64Bug1786TestCase::Int64x64Bug1786TestCase ()
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   588
  : TestCase ("Test case for bug 1786")
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   589
{
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   590
}
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   591
void
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   592
Int64x64Bug1786TestCase::Check (const uint64_t low,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   593
				const std::string & str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   594
				const int64_t tolerance /* = 0 */)
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   595
{
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   596
  int64x64_t value (0, low);
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   597
  std::ostringstream oss;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   598
  oss << std::scientific << std::setprecision (22) << value;
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   599
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   600
  if (tolerance == 0)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   601
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   602
      bool pass = oss.str () == str;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   603
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   604
      std::cout << GetParent ()->GetName () << " Bug 1786: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   605
		<< (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   606
		<< "    0x" << std::hex << std::setw (16) << low << std::dec
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   607
		<< " = "    << oss.str ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   608
      if (!pass)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   609
	{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   610
	  std::cout << ", expected " << str;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   611
	}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   612
      std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   613
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   614
      NS_TEST_EXPECT_MSG_EQ (oss.str (), str,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   615
			     "Fraction string not correct");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   616
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   617
  else
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   618
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   619
      // No obvious way to implement a tolerance on the strings
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   620
      
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   621
      std::cout << GetParent ()->GetName () << " Bug 1786: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   622
		<< "skip "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   623
		<< "    0x" << std::hex << std::setw (16) << low << std::dec
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   624
		<< " = "    << oss.str ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   625
		<< ", expected " << str
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   626
		<< std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   627
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   628
    }
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   629
}
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   630
void
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   631
Int64x64Bug1786TestCase::DoRun (void)
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   632
{
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   633
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   634
  std::cout << GetParent ()->GetName () << " But 1786: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   635
	    << std::endl;
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   636
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   637
  int64_t tolerance = 0;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   638
  if (int64x64_t::implementation == int64x64_t::ld_impl)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   639
    {
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   640
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   641
      tolerance = 1;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   642
    }
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   643
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   644
  // Some of these values differ from the DoubleTestCase
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   645
  // by one count in the last place
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   646
  // because operator<< truncates the last output digit,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   647
  // instead of rounding.
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   648
  Check (                 1ULL, "+0.0000000000000000000542");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   649
  Check (                 2ULL, "+0.0000000000000000001084");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   650
  Check (                 3ULL, "+0.0000000000000000001626");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   651
  Check (                 4ULL, "+0.0000000000000000002168");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   652
  Check (                 5ULL, "+0.0000000000000000002710");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   653
  Check (                 6ULL, "+0.0000000000000000003253");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   654
  Check (                 7ULL, "+0.0000000000000000003795");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   655
  Check (                 8ULL, "+0.0000000000000000004337");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   656
  Check (                 9ULL, "+0.0000000000000000004879");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   657
  Check (               0xAULL, "+0.0000000000000000005421");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   658
  Check (               0xFULL, "+0.0000000000000000008132");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   659
  Check (              0xF0ULL, "+0.0000000000000000130104");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   660
  Check (             0xF00ULL, "+0.0000000000000002081668");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   661
  Check (            0xF000ULL, "+0.0000000000000033306691");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   662
  Check (           0xF0000ULL, "+0.0000000000000532907052");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   663
  Check (          0xF00000ULL, "+0.0000000000008526512829");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   664
  Check (         0xF000000ULL, "+0.0000000000136424205266");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   665
  Check (        0xF0000000ULL, "+0.0000000002182787284255");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   666
  Check (       0xF00000000ULL, "+0.0000000034924596548080");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   667
  Check (      0xF000000000ULL, "+0.0000000558793544769287");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   668
  Check (     0xF0000000000ULL, "+0.0000008940696716308594");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   669
  Check (    0xF00000000000ULL, "+0.0000143051147460937500");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   670
  Check (   0xF000000000000ULL, "+0.0002288818359375000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   671
  Check (  0xF0000000000000ULL, "+0.0036621093750000000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   672
  Check ( 0xF00000000000000ULL, "+0.0585937500000000000000");
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   673
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   674
  Check (0x7FFFFFFFFFFFFFFDULL, "+0.4999999999999999998374", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   675
  Check (0x7FFFFFFFFFFFFFFEULL, "+0.4999999999999999998916", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   676
  Check (0x7FFFFFFFFFFFFFFFULL, "+0.4999999999999999999458", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   677
  Check (0x8000000000000000ULL, "+0.5000000000000000000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   678
  Check (0x8000000000000001ULL, "+0.5000000000000000000542", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   679
  Check (0x8000000000000002ULL, "+0.5000000000000000001084", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   680
  Check (0x8000000000000003ULL, "+0.5000000000000000001626", tolerance);
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   681
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   682
  Check (0xF000000000000000ULL, "+0.9375000000000000000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   683
  Check (0xFF00000000000000ULL, "+0.9960937500000000000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   684
  Check (0xFFF0000000000000ULL, "+0.9997558593750000000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   685
  Check (0xFFFF000000000000ULL, "+0.9999847412109375000000");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   686
  Check (0xFFFFF00000000000ULL, "+0.9999990463256835937500");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   687
  Check (0xFFFFFF0000000000ULL, "+0.9999999403953552246094");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   688
  Check (0xFFFFFFF000000000ULL, "+0.9999999962747097015381");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   689
  Check (0xFFFFFFFF00000000ULL, "+0.9999999997671693563461");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   690
  Check (0xFFFFFFFFF0000000ULL, "+0.9999999999854480847716");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   691
  Check (0xFFFFFFFFFF000000ULL, "+0.9999999999990905052982");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   692
  Check (0xFFFFFFFFFFF00000ULL, "+0.9999999999999431565811");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   693
  Check (0xFFFFFFFFFFFF0000ULL, "+0.9999999999999964472863");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   694
  Check (0xFFFFFFFFFFFFF000ULL, "+0.9999999999999997779554");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   695
  Check (0xFFFFFFFFFFFFFF00ULL, "+0.9999999999999999861222");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   696
  Check (0xFFFFFFFFFFFFFFF0ULL, "+0.9999999999999999991326");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   697
  Check (0xFFFFFFFFFFFFFFF5ULL, "+0.9999999999999999994037", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   698
  Check (0xFFFFFFFFFFFFFFF6ULL, "+0.9999999999999999994579", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   699
  Check (0xFFFFFFFFFFFFFFF7ULL, "+0.9999999999999999995121", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   700
  Check (0xFFFFFFFFFFFFFFF8ULL, "+0.9999999999999999995663", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   701
  Check (0xFFFFFFFFFFFFFFF9ULL, "+0.9999999999999999996205", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   702
  Check (0xFFFFFFFFFFFFFFFAULL, "+0.9999999999999999996747", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   703
  Check (0xFFFFFFFFFFFFFFFBULL, "+0.9999999999999999997289", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   704
  Check (0xFFFFFFFFFFFFFFFCULL, "+0.9999999999999999997832", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   705
  Check (0xFFFFFFFFFFFFFFFDULL, "+0.9999999999999999998374", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   706
  Check (0xFFFFFFFFFFFFFFFEULL, "+0.9999999999999999998916", tolerance);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   707
  Check (0xFFFFFFFFFFFFFFFFULL, "+0.9999999999999999999458", tolerance);
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   708
}
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
   709
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   710
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   711
class Int64x64CompareTestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   712
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   713
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   714
  Int64x64CompareTestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   715
  virtual void DoRun (void);
10599
f80b2ef21ac5 Fix overeager signed comparison optimization in gcc-4.4
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10598
diff changeset
   716
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   717
  void Check (const bool result, const bool expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   718
	      const std::string & msg);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   719
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   720
Int64x64CompareTestCase::Int64x64CompareTestCase ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   721
  : TestCase ("Basic compare operations")
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   722
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   723
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   724
void
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   725
Int64x64CompareTestCase::Check (const bool result, const bool expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   726
				const std::string & msg)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   727
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   728
  bool pass = result == expect;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   729
  
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   730
  std::cout << GetParent ()->GetName () << " Compare: "
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   731
	    << (pass ? "pass " : "FAIL ")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   732
	    << msg
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   733
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   734
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   735
  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   736
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   737
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   738
void
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   739
Int64x64CompareTestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   740
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   741
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   742
  std::cout << GetParent ()->GetName () << " Compare: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   743
	    << std::endl;
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   744
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   745
  const int64x64_t zero ( 0, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   746
  const int64x64_t one  ( 1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   747
  const int64x64_t two  ( 2, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   748
  const int64x64_t mone (-1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   749
  const int64x64_t mtwo (-2, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   750
  const int64x64_t frac  = int64x64_t (0, 0xc000000000000000ULL);  // 0.75
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   751
  const int64x64_t zerof = zero + frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   752
  const int64x64_t onef  = one  + frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   753
  const int64x64_t monef = mone - frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   754
  const int64x64_t mtwof = mtwo - frac;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   755
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   756
  Check ( zerof    == zerof, true,  "equality, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   757
  Check ( onef     == onef,  true,  "equality, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   758
  Check ( mtwof    == mtwof, true,  "equality, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   759
  Check ( zero     == one,   false, "equality false, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   760
  Check ( one      == two,   false, "equality false, unsigned");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   761
  Check ( one      == mone,  false, "equality false, signed");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   762
  Check ( onef     == one,   false, "equality false, fraction");
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   763
  std::cout << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   764
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   765
  Check ( zerof    != zerof, false, "inequality, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   766
  Check ( onef     != onef,  false, "inequality, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   767
  Check ( mtwof    != mtwof, false, "inequality, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   768
  Check ( zero     != one,   true,  "inequality true, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   769
  Check ( one      != two,   true,  "inequality true, unsigned");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   770
  Check ( one      != mone,  true,  "inequality true, signed");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   771
  Check ( onef     != one,   true,  "inequality true, fraction");
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   772
  std::cout << std::endl;
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   773
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   774
  Check ( zerof    <  onef,  true,  "less, zerof");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   775
  Check ( zero     <  zerof, true,  "less, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   776
  Check ( one      <  onef,  true,  "less, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   777
  Check ( monef    <  mone,  true,  "less, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   778
  Check ( onef     <  one,   false, "less, false, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   779
  Check ( mtwo     <  mtwof, false, "less, false, negative");
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   780
  std::cout << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   781
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   782
  Check ( zerof    <= zerof, true,  "less equal, equal, zerof");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   783
  Check ( zero     <= zerof, true,  "less equal, less, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   784
  Check ( onef     <= onef,  true,  "less equal, equal, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   785
  Check ( monef    <= mone,  true,  "less equal, less, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   786
  Check ( onef     <= one,   false, "less equal, false, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   787
  Check ( mtwo     <= mtwof, false, "less equal, false, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   788
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   789
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   790
  Check ( onef     >  zerof, true,  "greater, zerof");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   791
  Check ( zerof    >  zero,  true,  "greater, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   792
  Check ( onef     >  one,   true,  "greater, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   793
  Check ( mone     >  monef, true,  "greater, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   794
  Check ( one      >  onef,  false, "greater, false, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   795
  Check ( mtwof    >  mtwo,  false, "greater, false, negative");
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   796
  std::cout << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   797
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   798
  Check ( zerof    >= zerof, true,  "greater equal, equal, zerof");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   799
  Check ( zerof    >= zero,  true,  "greater equal, greater, zero");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   800
  Check ( onef     >= onef,  true,  "greater equal, equal, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   801
  Check ( mone     >= monef, true,  "greater equal, greater, negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   802
  Check ( one      >= onef,  false, "greater equal, false, positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   803
  Check ( mtwof    >= mtwo,  false, "greater equal, false, negative");
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   804
  std::cout << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   805
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   806
  Check ( zero     == false, true,  "zero   == false");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   807
  Check ( one      == true,  true,  "one    == true");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   808
  Check ( zerof    != false, true,  "zerof  != false");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   809
  Check ( (!zero)  == true,  true,  "!zero  == true");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   810
  Check ( (!zerof) == false, true,  "!zerof == false");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   811
  Check ( (!one)   == false, true,  "!one   == false");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   812
  Check ( (+onef)  == onef,  true, "unary positive");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   813
  Check ( (-onef)  == monef, true, "unary negative");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   814
}
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   815
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   816
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   817
class Int64x64InvertTestCase : public TestCase
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   818
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   819
public:
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   820
  Int64x64InvertTestCase ();
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   821
  virtual void DoRun (void);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   822
  void Check (const int64_t factor);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   823
  void CheckCase (const uint64_t factor,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   824
		  const int64x64_t result, const int64x64_t expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   825
		  const std::string & msg,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   826
		  const double tolerance = 0);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   827
};
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   828
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   829
Int64x64InvertTestCase::Int64x64InvertTestCase ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   830
  : TestCase ("Invert and MulByInvert")
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   831
{
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   832
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   833
void
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   834
Int64x64InvertTestCase::CheckCase (const uint64_t factor,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   835
				   const int64x64_t result,
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   836
				   const int64x64_t expect,
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   837
				   const std::string & msg,
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   838
				   const double tolerance /* = 0 */)
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   839
{
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   840
  bool pass = Abs (result - expect) <= tolerance;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   841
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   842
  std::cout << GetParent ()->GetName () << " Invert: ";
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   843
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   844
  if (pass)
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   845
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   846
      std::cout << "pass:  " << factor << ": ";
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   847
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   848
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   849
  else
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   850
    {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   851
      std::cout << "FAIL:  " << factor << ": "
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   852
		<< "(res: " << result
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   853
		<< " exp: " << expect
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   854
		<< " tol: " << tolerance << ")  ";
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   855
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   856
  std::cout << msg 
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   857
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   858
  
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   859
  NS_TEST_ASSERT_MSG_EQ_TOL (result, expect, int64x64_t(tolerance), msg);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   860
}
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   861
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   862
void
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   863
Int64x64InvertTestCase::Check (const int64_t factor)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   864
{
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   865
  const int64x64_t one (1, 0);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   866
  const int64x64_t factorI = one / int64x64_t (factor);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   867
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   868
  const int64x64_t a = int64x64_t::Invert (factor);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   869
  int64x64_t b = int64x64_t (factor);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   870
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   871
  double tolerance = 0;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   872
  if (int64x64_t::implementation == int64x64_t::ld_impl)
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   873
    {
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   874
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   875
      tolerance = 0.000000000000000001L;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   876
    }
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   877
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   878
  b.MulByInvert (a);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   879
  CheckCase (factor, b, one, "x * x^-1 == 1", tolerance);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   880
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   881
  int64x64_t c = int64x64_t (1);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   882
  c.MulByInvert (a);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   883
  CheckCase (factor, c, factorI, "1 * x^-1 == 1 / x");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   884
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   885
  int64x64_t d = int64x64_t (1);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   886
  d /= (int64x64_t (factor));
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   887
  CheckCase (factor, d, c, "1/x == x^-1");
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   888
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   889
  int64x64_t e = int64x64_t (-factor);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   890
  e.MulByInvert (a);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   891
  CheckCase (factor, e, -one, "-x * x^-1 == -1", tolerance);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   892
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   893
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   894
void
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   895
Int64x64InvertTestCase::DoRun (void)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   896
{
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   897
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   898
  std::cout << GetParent ()->GetName () << " Invert: " << GetName ()
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   899
	    << std::endl;
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   900
  
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   901
  Check (2);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   902
  Check (3);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   903
  Check (4);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   904
  Check (5);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   905
  Check (6);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   906
  Check (10);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   907
  Check (99);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   908
  Check (100);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   909
  Check (1000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   910
  Check (10000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   911
  Check (100000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   912
  Check (100000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   913
  Check (1000000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   914
  Check (10000000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   915
  Check (100000000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   916
  Check (1000000000);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   917
  Check (10000000000LL);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   918
  Check (100000000000LL);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   919
  Check (1000000000000LL);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   920
  Check (10000000000000LL);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   921
  Check (100000000000000LL);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
   922
  Check (1000000000000000LL);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   923
}
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   924
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   925
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   926
class Int64x64DoubleTestCase : public TestCase
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   927
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   928
public:
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   929
  Int64x64DoubleTestCase ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   930
  virtual void DoRun (void);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   931
  void Check (const int64_t intPart);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   932
  void Check (const long double value,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   933
	      const int64_t intPart,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   934
	      const uint64_t lo);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   935
private:
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   936
  long double m_last;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   937
  int64x64_t  m_deltaMax;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   938
  int         m_deltaCount;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   939
};
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   940
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   941
Int64x64DoubleTestCase::Int64x64DoubleTestCase ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   942
  : TestCase ("Construct from floating point.")
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   943
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   944
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   945
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   946
void
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   947
Int64x64DoubleTestCase::Check (const long double value,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   948
			       const int64_t intPart,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   949
			       const uint64_t lo)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   950
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   951
  // Construct the expected value
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   952
  int64x64_t expect = int64x64_t (0, lo);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   953
  expect += intPart;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   954
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   955
  // Actual value of conversion from double
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   956
  const int64x64_t result = int64x64_t (value);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   957
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   958
  // Make tolerance depend on magnitude of value
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   959
  long double margin = 0;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   960
  if (int64x64_t::implementation == int64x64_t::ld_impl)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   961
    {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   962
      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   963
      margin = 1.0;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   964
    }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   965
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   966
  const int64x64_t tolerance = (margin + std::fabs (value))
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   967
    * std::numeric_limits<long double>::epsilon ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   968
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   969
  const int64x64_t delta = Abs (result - expect);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   970
  const bool skip = value == m_last;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   971
  const bool pass = delta <= tolerance;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   972
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   973
  // Save stream format flags
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   974
  std::ios_base::fmtflags ff = std::cout.flags ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   975
  std::cout << std::fixed << std::setprecision (22);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   976
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   977
  std::cout << GetParent ()->GetName () << " Double: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   978
	    << (skip ? "skip " : (pass ? "pass " : "FAIL "))
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   979
	    << std::showpos << value << " == " 
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   980
	    << Printer (result)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   981
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   982
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   983
  // Log non-zero delta
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   984
  if ( delta > int64x64_t() )
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   985
    {
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   986
      std::cout << GetParent ()->GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   987
		<< std::left  << std::setw (43) << "         expected"
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   988
		<< std::right << Printer (expect)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   989
		<< std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   990
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   991
      if (delta == tolerance)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   992
	{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   993
	  std::cout << GetParent ()->GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   994
		    << std::left  << std::setw (43) << "         delta = tolerance"
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   995
		    << std::right << Printer (delta)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   996
		    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   997
	}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   998
      else
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
   999
	{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1000
	  std::cout << GetParent ()->GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1001
		    << std::left  << std::setw (43) << "         delta"
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1002
		    << std::right << Printer (delta)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1003
		    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1004
	  std::cout << GetParent ()->GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1005
		    << std::left  << std::setw (43) << "         +/-"
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1006
		    << std::right << Printer (tolerance)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1007
		    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1008
	}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1009
      
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1010
      ++m_deltaCount;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1011
      
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1012
      if ( delta > m_deltaMax )
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1013
	{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1014
	  m_deltaMax = delta;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1015
	}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1016
    }
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1017
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1018
  NS_TEST_ASSERT_MSG_EQ_TOL (result, expect, tolerance,
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1019
			     "int64x64_t (long double) failed");
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1020
  m_last = value;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1021
  std::cout.flags (ff);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1022
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1023
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1024
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1025
void
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1026
Int64x64DoubleTestCase::Check (const int64_t intPart)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1027
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1028
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1029
  std::cout << GetParent ()->GetName () << " Double: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1030
	    << "integer: " << intPart
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1031
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1032
  m_last = intPart;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1033
  m_deltaCount = 0;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1034
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1035
  // Nudging the integer part eliminates deltas around 0
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1036
  long double v = intPart;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1037
  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1038
  Check (v +0.0000000000000000000542L, intPart,                0x1ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1039
  Check (v +0.0000000000000000001084L, intPart,                0x2ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1040
  Check (v +0.0000000000000000001626L, intPart,                0x3ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1041
  Check (v +0.0000000000000000002168L, intPart,                0x4ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1042
  Check (v +0.0000000000000000002710L, intPart,                0x5ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1043
  Check (v +0.0000000000000000003253L, intPart,                0x6ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1044
  Check (v +0.0000000000000000003795L, intPart,                0x7ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1045
  Check (v +0.0000000000000000004337L, intPart,                0x8ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1046
  Check (v +0.0000000000000000004879L, intPart,                0x9ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1047
  Check (v +0.0000000000000000005421L, intPart,                0xAULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1048
  Check (v +0.0000000000000000008132L, intPart,                0xFULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1049
  Check (v +0.0000000000000000130104L, intPart,               0xF0ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1050
  Check (v +0.0000000000000002081668L, intPart,              0xF00ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1051
  Check (v +0.0000000000000033306691L, intPart,             0xF000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1052
  Check (v +0.0000000000000532907052L, intPart,            0xF0000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1053
  Check (v +0.0000000000008526512829L, intPart,           0xF00000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1054
  Check (v +0.0000000000136424205266L, intPart,          0xF000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1055
  Check (v +0.0000000002182787284255L, intPart,         0xF0000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1056
  Check (v +0.0000000034924596548080L, intPart,        0xF00000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1057
  Check (v +0.0000000558793544769287L, intPart,       0xF000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1058
  Check (v +0.0000008940696716308594L, intPart,      0xF0000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1059
  Check (v +0.0000143051147460937500L, intPart,     0xF00000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1060
  Check (v +0.0002288818359375000000L, intPart,    0xF000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1061
  Check (v +0.0036621093750000000000L, intPart,   0xF0000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1062
  Check (v +0.0585937500000000000000L, intPart,  0xF00000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1063
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1064
  Check (v +0.4999999999999999998374L, intPart, 0x7FFFFFFFFFFFFFFDULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1065
  Check (v +0.4999999999999999998916L, intPart, 0x7FFFFFFFFFFFFFFEULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1066
  Check (v +0.4999999999999999999458L, intPart, 0x7FFFFFFFFFFFFFFFULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1067
  Check (v +0.5000000000000000000000L, intPart, 0x8000000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1068
  Check (v +0.5000000000000000000542L, intPart, 0x8000000000000001ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1069
  Check (v +0.5000000000000000001084L, intPart, 0x8000000000000002ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1070
  Check (v +0.5000000000000000001626L, intPart, 0x8000000000000003ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1071
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1072
  Check (v +0.9375000000000000000000L, intPart, 0xF000000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1073
  Check (v +0.9960937500000000000000L, intPart, 0xFF00000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1074
  Check (v +0.9997558593750000000000L, intPart, 0xFFF0000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1075
  Check (v +0.9999847412109375000000L, intPart, 0xFFFF000000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1076
  Check (v +0.9999990463256835937500L, intPart, 0xFFFFF00000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1077
  Check (v +0.9999999403953552246094L, intPart, 0xFFFFFF0000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1078
  Check (v +0.9999999962747097015381L, intPart, 0xFFFFFFF000000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1079
  Check (v +0.9999999997671693563461L, intPart, 0xFFFFFFFF00000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1080
  Check (v +0.9999999999854480847716L, intPart, 0xFFFFFFFFF0000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1081
  Check (v +0.9999999999990905052982L, intPart, 0xFFFFFFFFFF000000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1082
  Check (v +0.9999999999999431565811L, intPart, 0xFFFFFFFFFFF00000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1083
  Check (v +0.9999999999999964472863L, intPart, 0xFFFFFFFFFFFF0000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1084
  Check (v +0.9999999999999997779554L, intPart, 0xFFFFFFFFFFFFF000ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1085
  Check (v +0.9999999999999999861222L, intPart, 0xFFFFFFFFFFFFFF00ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1086
  Check (v +0.9999999999999999991326L, intPart, 0xFFFFFFFFFFFFFFF0ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1087
  Check (v +0.9999999999999999994037L, intPart, 0xFFFFFFFFFFFFFFF5ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1088
  Check (v +0.9999999999999999994579L, intPart, 0xFFFFFFFFFFFFFFF6ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1089
  Check (v +0.9999999999999999995121L, intPart, 0xFFFFFFFFFFFFFFF7ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1090
  Check (v +0.9999999999999999995663L, intPart, 0xFFFFFFFFFFFFFFF8ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1091
  Check (v +0.9999999999999999996205L, intPart, 0xFFFFFFFFFFFFFFF9ULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1092
  Check (v +0.9999999999999999996747L, intPart, 0xFFFFFFFFFFFFFFFAULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1093
  Check (v +0.9999999999999999997289L, intPart, 0xFFFFFFFFFFFFFFFBULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1094
  Check (v +0.9999999999999999997832L, intPart, 0xFFFFFFFFFFFFFFFCULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1095
  Check (v +0.9999999999999999998374L, intPart, 0xFFFFFFFFFFFFFFFDULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1096
  Check (v +0.9999999999999999998916L, intPart, 0xFFFFFFFFFFFFFFFEULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1097
  Check (v +0.9999999999999999999458L, intPart, 0xFFFFFFFFFFFFFFFFULL);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1098
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1099
  std::cout << GetParent ()->GetName () << " Double: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1100
	    << "integer: " << intPart
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1101
	    << ": delta count: " << m_deltaCount
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1102
	    << ", max: " << Printer (m_deltaMax)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1103
	    << std::endl;  
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1104
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1105
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1106
void
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1107
Int64x64DoubleTestCase::DoRun (void)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1108
{
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1109
  std::cout << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1110
  std::cout << GetParent ()->GetName () << " Double: " << GetName ()
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1111
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1112
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1113
  // Save stream format flags
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1114
  std::ios_base::fmtflags ff = std::cout.flags ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1115
  std::cout << std::scientific << std::setprecision (21);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1116
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1117
  m_deltaMax = int64x64_t ();
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1118
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1119
  std::cout << GetParent ()->GetName () << " Double: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1120
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1121
    
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1122
  Check (-2);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1123
  Check (-1);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1124
  Check ( 0);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1125
  Check ( 1);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1126
  Check ( 2);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1127
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1128
  std::cout << GetParent ()->GetName () << " Double: "
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1129
	    << "max delta: " << Printer (m_deltaMax)
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1130
	    << std::endl;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1131
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1132
  std::cout.flags (ff);
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1133
}
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1134
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1135
10610
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1136
class Int64x64ImplTestCase : public TestCase
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1137
{
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1138
public:
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1139
  Int64x64ImplTestCase ();
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1140
  virtual void DoRun (void);
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1141
};
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1142
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1143
Int64x64ImplTestCase::Int64x64ImplTestCase ()
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1144
  : TestCase ("Print the implementation")
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1145
{
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1146
}
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1147
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1148
void
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1149
Int64x64ImplTestCase::DoRun (void)
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1150
{
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1151
  std::cout << std::endl;
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1152
  std::cout << GetParent ()->GetName () << " Impl: " << GetName ()
10610
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1153
	    << std::endl;
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1154
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1155
  
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1156
  std::cout << "int64x64_t::implementation: ";
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1157
  switch (int64x64_t::implementation)
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1158
    {
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1159
    case (int64x64_t::int128_impl) : std::cout << "int128_impl"; break;
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1160
    case (int64x64_t::cairo_impl)  : std::cout << "cairo_impl";  break;
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1161
    case (int64x64_t::ld_impl)     : std::cout << "ld_impl";     break;
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1162
    default :                        std::cout << "unknown!";    
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1163
    }
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1164
  std::cout << std::endl;
10611
5390474ca6b7 [Bug 1786] Fix undeclared identifiers cairo_impl64 and cairo_impl128 in int128 builds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10610
diff changeset
  1165
5390474ca6b7 [Bug 1786] Fix undeclared identifiers cairo_impl64 and cairo_impl128 in int128 builds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10610
diff changeset
  1166
#if defined (INT64X64_USE_CAIRO) && !defined (PYTHON_SCAN)
5390474ca6b7 [Bug 1786] Fix undeclared identifiers cairo_impl64 and cairo_impl128 in int128 builds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10610
diff changeset
  1167
  std::cout << "cairo_impl64:  " << cairo_impl64 << std::endl;
5390474ca6b7 [Bug 1786] Fix undeclared identifiers cairo_impl64 and cairo_impl128 in int128 builds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10610
diff changeset
  1168
  std::cout << "cairo_impl128: " << cairo_impl128 << std::endl;
5390474ca6b7 [Bug 1786] Fix undeclared identifiers cairo_impl64 and cairo_impl128 in int128 builds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10610
diff changeset
  1169
#endif
10610
540e54a98bc8 [Bug 1786] Make cairo implementation type accessible.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10606
diff changeset
  1170
}
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1171
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1172
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1173
static class Int64x64TestSuite : public TestSuite
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1174
{
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1175
public:
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1176
  Int64x64TestSuite ()
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1177
    : TestSuite ("int64x64", UNIT)
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1178
  {
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1179
    AddTestCase (new Int64x64ImplTestCase (), TestCase::QUICK);
10597
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
  1180
    AddTestCase (new Int64x64HiLoTestCase (), TestCase::QUICK);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
  1181
    AddTestCase (new Int64x64ArithmeticTestCase (), TestCase::QUICK);
6e1bd685bcaa [Bug 1786] Fix for os << (int64x64_t) and fractional arithmetic
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10557
diff changeset
  1182
    AddTestCase (new Int64x64CompareTestCase (), TestCase::QUICK);
9266
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 9079
diff changeset
  1183
    AddTestCase (new Int64x64InputTestCase (), TestCase::QUICK);
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 9079
diff changeset
  1184
    AddTestCase (new Int64x64InputOutputTestCase (), TestCase::QUICK);
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 9079
diff changeset
  1185
    AddTestCase (new Int64x64Bug455TestCase (), TestCase::QUICK);
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 9079
diff changeset
  1186
    AddTestCase (new Int64x64Bug863TestCase (), TestCase::QUICK);
10557
e08d256cdffc [Bug 1786] os << int64x64_t prints un-normalized fractional values
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10157
diff changeset
  1187
    AddTestCase (new Int64x64Bug1786TestCase (), TestCase::QUICK);
9266
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 9079
diff changeset
  1188
    AddTestCase (new Int64x64InvertTestCase (), TestCase::QUICK);
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1189
    AddTestCase (new Int64x64DoubleTestCase (), TestCase::QUICK);
7045
d13fa06886ce merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1190
  }
10637
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1191
}  g_int64x64TestSuite;
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1192
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1193
}  // namespace test
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1194
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1195
}  // namespace int64x64
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1196
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1197
}  // namespace ns3
67601c471c22 [Bug 1856] int64x64_t double conversions
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10611
diff changeset
  1198