a bunch of tests
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 04 Dec 2006 13:45:46 +0100
changeset 177 9ba1bf880c55
parent 176 74494759f122
child 178 78e2db8d8128
a bunch of tests
src/simulator/high-precision-128.cc
--- a/src/simulator/high-precision-128.cc	Mon Dec 04 13:42:31 2006 +0100
+++ b/src/simulator/high-precision-128.cc	Mon Dec 04 13:45:46 2006 +0100
@@ -132,3 +132,143 @@
 
 
 }; // namespace ns3
+
+
+#ifdef RUN_SELF_TESTS
+#include "ns3/test.h"
+
+namespace ns3 {
+
+class HighPrecision128Tests : public Test
+{
+public:
+  HighPrecision128Tests ();
+  virtual ~HighPrecision128Tests ();
+  virtual bool RunTests (void);
+};
+
+HighPrecision128Tests::HighPrecision128Tests ()
+  : Test ("Int128")
+{}
+HighPrecision128Tests::~HighPrecision128Tests ()
+{}
+
+#define CHECK_EXPECTED(v,expected) \
+{ \
+  if (v.GetInteger () != expected) \
+    { \
+      Failure () << "file="<<__FILE__<<", line="<<__LINE__<<", expected: "<<expected<<", got: "<< v.GetInteger ()<<std::endl; \
+      ok = false; \
+    } \
+}
+
+#define V(v) \
+  HighPrecision (v, false)
+
+bool
+HighPrecision128Tests::RunTests (void)
+{
+  bool ok = true;
+
+  HighPrecision a, b;
+  a = HighPrecision (1, false);
+  b = HighPrecision (1, false);
+
+  a.Sub (b);
+  CHECK_EXPECTED (a, 0);
+
+  a = V (1);
+  a.Sub (V(2));
+  CHECK_EXPECTED (a, -1);
+
+  a = V (1);
+  a.Sub (V(3));
+  CHECK_EXPECTED (a, -2);
+
+  a = V (1);
+  a.Sub (V(-1));
+  CHECK_EXPECTED (a, 2);
+
+  a = V (1);
+  a.Sub (V(-2));
+  CHECK_EXPECTED (a, 3);
+
+  a = V (-3);
+  a.Sub (V(-4));
+  CHECK_EXPECTED (a, 1);
+
+  a = V (-2);
+  a.Sub (V(3));
+  CHECK_EXPECTED (a, -5);
+
+  a = V (1);
+  a.Add (V(2));
+  CHECK_EXPECTED (a, 3);
+
+  a = V (1);
+  a.Add (V(-3));
+  CHECK_EXPECTED (a, -2);
+
+  a = V (0);
+  a.Add (V(0));
+  CHECK_EXPECTED (a, 0);
+
+  a = V (0);
+  a.Mul (V(0));
+  CHECK_EXPECTED (a, 0);
+  a = V (0);
+  a.Mul (V(1));
+  CHECK_EXPECTED (a, 0);
+  a = V (0);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, 0);
+  a = V (1);
+  a.Mul (V(0));
+  CHECK_EXPECTED (a, 0);
+  a = V (1);
+  a.Mul (V(1));
+  CHECK_EXPECTED (a, 1);
+  a = V (1);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, -1);
+  a = V (-1);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, 1);
+
+  a = V (0);
+  a.Mul (V(1));
+  CHECK_EXPECTED (a, 0);
+  a = V (0);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, 0);
+  a = V (1);
+  a.Mul (V(1));
+  CHECK_EXPECTED (a, 1);
+  a = V (1);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, -1);
+  a = V (-1);
+  a.Mul (V(1));
+  CHECK_EXPECTED (a, -1);
+  a = V (-1);
+  a.Mul (V(-1));
+  CHECK_EXPECTED (a, 1);
+
+
+
+  a = V (2);
+  a.Div (V(3));
+  a.Mul (V(3));
+  CHECK_EXPECTED (a, 2);
+
+
+
+  return ok;
+}
+
+static HighPrecision128Tests g_int128_tests;
+
+
+}; // namespace ns3
+
+#endif /* RUN_SELF_TESTS */