diff --git a/src/db/db/dbPoint.cc b/src/db/db/dbPoint.cc index 97641e812..e138ac6a3 100644 --- a/src/db/db/dbPoint.cc +++ b/src/db/db/dbPoint.cc @@ -22,6 +22,7 @@ #include "dbPoint.h" +#include "dbVector.h" // ---------------------------------------------------------------- // Implementation of the custom extractors @@ -55,6 +56,15 @@ namespace { } +namespace db +{ + +// instantiations +template class point; +template class point; + +} + namespace tl { diff --git a/src/db/db/dbPoint.h b/src/db/db/dbPoint.h index ca281f080..ae8ff8638 100644 --- a/src/db/db/dbPoint.h +++ b/src/db/db/dbPoint.h @@ -47,7 +47,7 @@ class ArrayRepository; */ template -class DB_PUBLIC_TEMPLATE point +class DB_PUBLIC point { public: typedef C coord_type; @@ -131,27 +131,48 @@ public: /** * @brief Add to operation */ - point &operator+= (const vector &v); + point &operator+= (const vector &v) + { + m_x += v.x (); + m_y += v.y (); + return *this; + } /** * @brief method version of operator+ (mainly for automation purposes) */ - point add (const vector &v) const; + point add (const vector &v) const + { + point r (*this); + r += v; + return r; + } /** * @brief Subtract from operation */ - point &operator-= (const vector &v); + point &operator-= (const vector &v) + { + m_x -= v.x (); + m_y -= v.y (); + return *this; + } /** * @brief method version of operator- (mainly for automation purposes) */ - point subtract (const vector &v) const; + point subtract (const vector &v) const + { + return *this - v; + } /** * @brief method version of operator- (mainly for automation purposes) */ - vector subtract (const point &p) const; + vector subtract (const point &p) const + { + return *this - p; + } /** * @brief "less" comparison operator @@ -159,17 +180,26 @@ public: * This operator is provided to establish a sorting * order */ - bool operator< (const point &p) const; + bool operator< (const point &p) const + { + return m_y < p.m_y || (m_y == p.m_y && m_x < p.m_x); + } /** * @brief Equality test operator */ - bool operator== (const point &p) const; + bool operator== (const point &p) const + { + return m_x == p.m_x && m_y == p.m_y; + } /** * @brief Inequality test operator */ - bool operator!= (const point &p) const; + bool operator!= (const point &p) const + { + return !operator== (p); + } /** * @brief Const transform @@ -181,7 +211,10 @@ public: * @return The transformed point */ template - point transformed (const Tr &t) const; + point transformed (const Tr &t) const + { + return t (*this); + } /** * @brief In-place transformation @@ -193,27 +226,43 @@ public: * @return The transformed point */ template - point &transform (const Tr &t); + point &transform (const Tr &t) + { + *this = t (*this); + return *this; + } /** * @brief Accessor to the x coordinate */ - C x () const; + C x () const + { + return m_x; + } /** * @brief Accessor to the y coordinate */ - C y () const; + C y () const + { + return m_y; + } /** * @brief Write accessor to the x coordinate */ - void set_x (C _x); + void set_x (C _x) + { + m_x = _x; + } /** * @brief Write accessor to the y coordinate */ - void set_y (C _y); + void set_y (C _y) + { + m_y = _y; + } /** * @brief Scaling self by some factor @@ -221,12 +270,22 @@ public: * Scaling involves rounding which in our case is simply handled * with the coord_traits scheme. */ - point &operator*= (double s); + point &operator*= (double s) + { + m_x = coord_traits::rounded (m_x * s); + m_y = coord_traits::rounded (m_y * s); + return *this; + } /** * @brief Scaling self by some integer factor */ - point &operator*= (long s); + point &operator*= (long s) + { + m_x = coord_traits::rounded (m_x * s); + m_y = coord_traits::rounded (m_y * s); + return *this; + } /** * @brief Division by some divisor. @@ -235,62 +294,114 @@ public: * with the coord_traits scheme. */ - point &operator/= (double s); + point &operator/= (double s) + { + double mult = 1.0 / static_cast(s); + *this *= mult; + return *this; + } /** * @brief Dividing self by some integer divisor */ - point &operator/= (long s); + point &operator/= (long s) + { + double mult = 1.0 / static_cast(s); + *this *= mult; + return *this; + } /** * @brief The euclidian distance to another point * * @param d The other to compute the distance to. */ - distance_type distance (const point &p) const; + distance_type distance (const point &p) const + { + double ddx (p.x ()); + double ddy (p.y ()); + ddx -= double (x ()); + ddy -= double (y ()); + return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); + } /** * @brief The euclidian distance of the point to (0,0) */ - distance_type distance () const; + distance_type distance () const + { + double ddx (x ()); + double ddy (y ()); + return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); + } /** * @brief The euclidian distance to another point as double value * * @param d The other to compute the distance to. */ - double double_distance (const point &p) const; + double double_distance (const point &p) const + { + double ddx (p.x ()); + double ddy (p.y ()); + ddx -= double (x ()); + ddy -= double (y ()); + return sqrt (ddx * ddx + ddy * ddy); + } /** * @brief The euclidian distance of the point to (0,0) as double value */ - double double_distance () const; + double double_distance () const + { + double ddx (x ()); + double ddy (y ()); + return sqrt (ddx * ddx + ddy * ddy); + } /** * @brief The square euclidian distance to another point * * @param d The other to compute the distance to. */ - area_type sq_distance (const point &p) const; + area_type sq_distance (const point &p) const + { + return coord_traits::sq_length (p.x (), p.y (), x (), y ()); + } /** * @brief The square euclidian distance to point (0,0) * * @param d The other to compute the distance to. */ - area_type sq_distance () const; + area_type sq_distance () const + { + return coord_traits::sq_length (0, 0, x (), y ()); + } /** * @brief The square of the euclidian distance to another point as double value * * @param d The other to compute the distance to. */ - double sq_double_distance (const point &p) const; + double sq_double_distance (const point &p) const + { + double ddx (p.x ()); + double ddy (p.y ()); + ddx -= double (x ()); + ddy -= double (y ()); + return ddx * ddx + ddy * ddy; + } /** * @brief The square of the euclidian distance of the point to (0,0) as double value */ - double sq_double_distance () const; + double sq_double_distance () const + { + double ddx (x ()); + double ddy (y ()); + return ddx * ddx + ddy * ddy; + } /** * @brief String conversion @@ -313,7 +424,10 @@ public: /** * @brief Fuzzy comparison of points */ - bool equal (const point &p) const; + bool equal (const point &p) const + { + return coord_traits::equal (x (), p.x ()) && coord_traits::equal (y (), p.y ()); + } /** * @brief Fuzzy comparison of points for inequality @@ -326,7 +440,16 @@ public: /** * @brief Fuzzy "less" comparison of points */ - bool less (const point &p) const; + bool less (const point &p) const + { + if (! coord_traits::equal (y (), p.y ())) { + return y () < p.y (); + } + if (! coord_traits::equal (x (), p.x ())) { + return x () < p.x (); + } + return false; + } /** * @brief The (dummy) translation operator @@ -350,131 +473,6 @@ private: C m_x, m_y; }; -template -inline point & -point::operator+= (const vector &v) -{ - m_x += v.x (); - m_y += v.y (); - return *this; -} - -template -inline point -point::add (const vector &v) const -{ - point r (*this); - r += v; - return r; -} - -template -inline point & -point::operator-= (const vector &v) -{ - m_x -= v.x (); - m_y -= v.y (); - return *this; -} - -template -inline point -point::subtract (const vector &v) const -{ - return *this - v; -} - -template -inline vector -point::subtract (const point &p) const -{ - return *this - p; -} - -template -inline bool -point::operator< (const point &p) const -{ - return m_y < p.m_y || (m_y == p.m_y && m_x < p.m_x); -} - -template -inline bool -point::less (const point &p) const -{ - if (! coord_traits::equal (y (), p.y ())) { - return y () < p.y (); - } - if (! coord_traits::equal (x (), p.x ())) { - return x () < p.x (); - } - return false; -} - -template -inline bool -point::operator== (const point &p) const -{ - return m_x == p.m_x && m_y == p.m_y; -} - -template -inline bool -point::equal (const point &p) const -{ - return coord_traits::equal (x (), p.x ()) && coord_traits::equal (y (), p.y ()); -} - -template -inline bool -point::operator!= (const point &p) const -{ - return !operator== (p); -} - -template template -inline point -point::transformed (const Tr &t) const -{ - return t (*this); -} - -template template -inline point & -point::transform (const Tr &t) -{ - *this = t (*this); - return *this; -} - -template -inline C -point::x () const -{ - return m_x; -} - -template -inline C -point::y () const -{ - return m_y; -} - -template -inline void -point::set_x (C _x) -{ - m_x = _x; -} - -template -inline void -point::set_y (C _y) -{ - m_y = _y; -} - template inline point operator* (const db::point &p, double s) @@ -518,116 +516,6 @@ operator/ (const db::point &p, Number s) return point (p.x () * mult, p.y () * mult); } -template -inline point & -point::operator/= (double s) -{ - double mult = 1.0 / static_cast(s); - *this *= mult; - return *this; -} - -template -inline point & -point::operator/= (long s) -{ - double mult = 1.0 / static_cast(s); - *this *= mult; - return *this; -} - -template -inline point & -point::operator*= (double s) -{ - m_x = coord_traits::rounded (m_x * s); - m_y = coord_traits::rounded (m_y * s); - return *this; -} - -template -inline point & -point::operator*= (long s) -{ - m_x = coord_traits::rounded (m_x * s); - m_y = coord_traits::rounded (m_y * s); - return *this; -} - -template -inline typename point::distance_type -point::distance (const point &p) const -{ - double ddx (p.x ()); - double ddy (p.y ()); - ddx -= double (x ()); - ddy -= double (y ()); - return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); -} - -template -inline typename point::distance_type -point::distance () const -{ - double ddx (x ()); - double ddy (y ()); - return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); -} - -template -inline double -point::double_distance (const point &p) const -{ - double ddx (p.x ()); - double ddy (p.y ()); - ddx -= double (x ()); - ddy -= double (y ()); - return sqrt (ddx * ddx + ddy * ddy); -} - -template -inline double -point::double_distance () const -{ - double ddx (x ()); - double ddy (y ()); - return sqrt (ddx * ddx + ddy * ddy); -} - -template -inline typename point::area_type -point::sq_distance (const point &p) const -{ - return coord_traits::sq_length (p.x (), p.y (), x (), y ()); -} - -template -inline typename point::area_type -point::sq_distance () const -{ - return coord_traits::sq_length (0, 0, x (), y ()); -} - -template -inline double -point::sq_double_distance (const point &p) const -{ - double ddx (p.x ()); - double ddy (p.y ()); - ddx -= double (x ()); - ddy -= double (y ()); - return ddx * ddx + ddy * ddy; -} - -template -inline double -point ::sq_double_distance () const -{ - double ddx (x ()); - double ddy (y ()); - return ddx * ddx + ddy * ddy; -} - /** * @brief The binary + operator (addition point and vector) * diff --git a/src/db/db/dbTriangle.h b/src/db/db/dbTriangle.h index bf9bea8fe..11bd2f3e3 100644 --- a/src/db/db/dbTriangle.h +++ b/src/db/db/dbTriangle.h @@ -32,6 +32,11 @@ #include "tlObjectCollection.h" #include "tlList.h" +#include +#include +#include +#include + namespace db { diff --git a/src/db/db/dbTriangles.cc b/src/db/db/dbTriangles.cc index 42e7ae0f7..ad6a5b0a4 100644 --- a/src/db/db/dbTriangles.cc +++ b/src/db/db/dbTriangles.cc @@ -29,6 +29,9 @@ #include "tlTimer.h" #include +#include +#include +#include namespace db { @@ -1085,7 +1088,7 @@ Triangles::fill_concave_corners (const std::vector &edges) } - if (not any_connected) { + if (! any_connected) { break; } @@ -1315,7 +1318,7 @@ Triangles::join_edges (std::vector &edges) void Triangles::constrain (const std::vector > &contours) { - assert (! m_is_constrained); + tl_assert (! m_is_constrained); std::vector > > resolved_edges; diff --git a/src/db/db/dbTriangles.h b/src/db/db/dbTriangles.h index 403d0afe4..62a24acf2 100644 --- a/src/db/db/dbTriangles.h +++ b/src/db/db/dbTriangles.h @@ -33,6 +33,11 @@ #include "tlObjectCollection.h" #include "tlStableVector.h" +#include +#include +#include +#include + namespace db { diff --git a/src/db/db/dbVector.cc b/src/db/db/dbVector.cc index 2ef408a5d..ece84502c 100644 --- a/src/db/db/dbVector.cc +++ b/src/db/db/dbVector.cc @@ -22,6 +22,7 @@ #include "dbVector.h" +#include "dbPoint.h" // ---------------------------------------------------------------- // Implementation of the custom extractors @@ -55,6 +56,15 @@ namespace { } +namespace db +{ + +// instantiations +template class vector; +template class vector; + +} + namespace tl { diff --git a/src/db/db/dbVector.h b/src/db/db/dbVector.h index 7f7e9c154..87faa90fa 100644 --- a/src/db/db/dbVector.h +++ b/src/db/db/dbVector.h @@ -45,7 +45,7 @@ template class point; */ template -class DB_PUBLIC_TEMPLATE vector +class DB_PUBLIC vector { public: typedef C coord_type; @@ -171,22 +171,42 @@ public: /** * @brief Add to operation */ - vector &operator+= (const vector &p); + vector &operator+= (const vector &p) + { + m_x += p.x (); + m_y += p.y (); + return *this; + } /** * @brief method version of operator+ (mainly for automation purposes) */ - vector add (const vector &p) const; + vector add (const vector &p) const + { + vector r (*this); + r += p; + return r; + } /** * @brief Subtract from operation */ - vector &operator-= (const vector &p); + vector &operator-= (const vector &p) + { + m_x -= p.x (); + m_y -= p.y (); + return *this; + } /** * @brief method version of operator- (mainly for automation purposes) */ - vector subtract (const vector &p) const; + vector subtract (const vector &p) const + { + vector r (*this); + r -= p; + return r; + } /** * @brief "less" comparison operator @@ -194,17 +214,26 @@ public: * This operator is provided to establish a sorting * order */ - bool operator< (const vector &p) const; + bool operator< (const vector &p) const + { + return m_y < p.m_y || (m_y == p.m_y && m_x < p.m_x); + } /** * @brief Equality test operator */ - bool operator== (const vector &p) const; + bool operator== (const vector &p) const + { + return m_x == p.m_x && m_y == p.m_y; + } /** * @brief Inequality test operator */ - bool operator!= (const vector &p) const; + bool operator!= (const vector &p) const + { + return !operator== (p); + } /** * @brief Const transform @@ -217,7 +246,10 @@ public: * @return The transformed vector */ template - vector transformed (const Tr &t) const; + vector transformed (const Tr &t) const + { + return t (vector (*this)); + } /** * @brief In-place transformation @@ -229,32 +261,51 @@ public: * @return The transformed vector */ template - vector &transform (const Tr &t); + vector &transform (const Tr &t) + { + *this = vector (t (*this)); + return *this; + } /** * @brief Accessor to the x coordinate */ - C x () const; + C x () const + { + return m_x; + } /** * @brief Accessor to the y coordinate */ - C y () const; + C y () const + { + return m_y; + } /** * @brief Write accessor to the x coordinate */ - void set_x (C _x); + void set_x (C _x) + { + m_x = _x; + } /** * @brief Write accessor to the y coordinate */ - void set_y (C _y); + void set_y (C _y) + { + m_y = _y; + } /** * @brief Fuzzy comparison of vectors */ - bool equal (const vector &p) const; + bool equal (const vector &p) const + { + return coord_traits::equal (x (), p.x ()) && coord_traits::equal (y (), p.y ()); + } /** * @brief Fuzzy comparison of vectors for inequality @@ -267,31 +318,56 @@ public: /** * @brief Fuzzy "less" comparison of vectors */ - bool less (const vector &p) const; + bool less (const vector &p) const + { + if (! coord_traits::equal (y (), p.y ())) { + return y () < p.y (); + } + if (! coord_traits::equal (x (), p.x ())) { + return x () < p.x (); + } + return false; + } /** * @brief Scaling by some factor * * To avoid round effects, the result vector is of double coordinate type. */ - vector operator* (double s) const; + vector operator* (double s) const + { + return vector (m_x * s, m_y * s); + } /** * @brief Scaling by some factor */ - vector operator* (long s) const; + vector operator* (long s) const + { + return vector (m_x * s, m_y * s); + } /** * @brief Scaling self by some factor * * Scaling by a double value in general involves rounding when the coordinate type is integer. */ - vector operator*= (double s); + vector operator*= (double s) + { + m_x = coord_traits::rounded (m_x * s); + m_y = coord_traits::rounded (m_y * s); + return *this; + } /** * @brief Scaling self by some integer factor */ - vector operator*= (long s); + vector operator*= (long s) + { + m_x *= s; + m_y *= s; + return *this; + } /** * @brief Division by some divisor. @@ -300,32 +376,60 @@ public: * with the coord_traits scheme. */ - vector &operator/= (double s); + vector &operator/= (double s) + { + double mult = 1.0 / static_cast(s); + *this *= mult; + return *this; + } /** * @brief Dividing self by some integer divisor */ - vector &operator/= (long s); + vector &operator/= (long s) + { + double mult = 1.0 / static_cast(s); + *this *= mult; + return *this; + } /** * @brief The euclidian length */ - distance_type length () const; + distance_type length () const + { + double ddx (x ()); + double ddy (y ()); + return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); + } /** * @brief The euclidian length of the vector */ - double double_length () const; + double double_length () const + { + double ddx (x ()); + double ddy (y ()); + return sqrt (ddx * ddx + ddy * ddy); + } /** * @brief The square euclidian length of the vector */ - area_type sq_length () const; + area_type sq_length () const + { + return coord_traits::sq_length (0, 0, x (), y ()); + } /** * @brief The square of the euclidian length of the vector */ - double sq_double_length () const; + double sq_double_length () const + { + double ddx (x ()); + double ddy (y ()); + return ddx * ddx + ddy * ddy; + } /** * @brief String conversion @@ -349,140 +453,6 @@ private: C m_x, m_y; }; -template -inline vector & -vector::operator+= (const vector &p) -{ - m_x += p.x (); - m_y += p.y (); - return *this; -} - -template -inline vector -vector::add (const vector &p) const -{ - vector r (*this); - r += p; - return r; -} - -template -inline vector & -vector::operator-= (const vector &p) -{ - m_x -= p.x (); - m_y -= p.y (); - return *this; -} - -template -inline vector -vector::subtract (const vector &p) const -{ - vector r (*this); - r -= p; - return r; -} - -template -inline bool -vector::operator< (const vector &p) const -{ - return m_y < p.m_y || (m_y == p.m_y && m_x < p.m_x); -} - -template -inline bool -vector::less (const vector &p) const -{ - if (! coord_traits::equal (y (), p.y ())) { - return y () < p.y (); - } - if (! coord_traits::equal (x (), p.x ())) { - return x () < p.x (); - } - return false; -} - -template -inline bool -vector::operator== (const vector &p) const -{ - return m_x == p.m_x && m_y == p.m_y; -} - -template -inline bool -vector::equal (const vector &p) const -{ - return coord_traits::equal (x (), p.x ()) && coord_traits::equal (y (), p.y ()); -} - -template -inline bool -vector::operator!= (const vector &p) const -{ - return !operator== (p); -} - -template template -inline vector -vector::transformed (const Tr &t) const -{ - return t (vector (*this)); -} - -template template -inline vector & -vector::transform (const Tr &t) -{ - *this = vector (t (*this)); - return *this; -} - -template -inline C -vector::x () const -{ - return m_x; -} - -template -inline C -vector::y () const -{ - return m_y; -} - -template -inline void -vector::set_x (C _x) -{ - m_x = _x; -} - -template -inline void -vector::set_y (C _y) -{ - m_y = _y; -} - -template -inline vector -vector::operator* (double s) const -{ - return vector (m_x * s, m_y * s); -} - -template -inline vector -vector::operator* (long s) const -{ - return vector (m_x * s, m_y * s); -} - template inline vector operator/ (const db::vector &p, Number s) @@ -491,76 +461,6 @@ operator/ (const db::vector &p, Number s) return vector (p.x () * mult, p.y () * mult); } -template -inline vector & -vector::operator/= (double s) -{ - double mult = 1.0 / static_cast(s); - *this *= mult; - return *this; -} - -template -inline vector & -vector::operator/= (long s) -{ - double mult = 1.0 / static_cast(s); - *this *= mult; - return *this; -} - -template -inline vector -vector::operator*= (double s) -{ - m_x = coord_traits::rounded (m_x * s); - m_y = coord_traits::rounded (m_y * s); - return *this; -} - -template -inline vector -vector::operator*= (long s) -{ - m_x *= s; - m_y *= s; - return *this; -} - -template -inline typename vector::distance_type -vector::length () const -{ - double ddx (x ()); - double ddy (y ()); - return coord_traits::rounded_distance (sqrt (ddx * ddx + ddy * ddy)); -} - -template -inline double -vector::double_length () const -{ - double ddx (x ()); - double ddy (y ()); - return sqrt (ddx * ddx + ddy * ddy); -} - -template -inline typename vector::area_type -vector::sq_length () const -{ - return coord_traits::sq_length (0, 0, x (), y ()); -} - -template -inline double -vector::sq_double_length () const -{ - double ddx (x ()); - double ddy (y ()); - return ddx * ddx + ddy * ddy; -} - /** * @brief The binary + operator (addition of vectors) * diff --git a/src/db/unit_tests/dbLayoutTests.cc b/src/db/unit_tests/dbLayoutTests.cc index 27183b0b6..c213209a5 100644 --- a/src/db/unit_tests/dbLayoutTests.cc +++ b/src/db/unit_tests/dbLayoutTests.cc @@ -482,7 +482,7 @@ TEST(4) el.layer_properties_dirty = false; EXPECT_EQ (g.get_layer_maybe (db::LayerProperties (42, 17)), -1); EXPECT_EQ (el.layer_properties_dirty, false); - // always true: EXPECT_EQ (g.get_layer (db::LayerProperties (42, 17)) >= 0, true); + g.get_layer (db::LayerProperties (42, 17)); EXPECT_EQ (el.layer_properties_dirty, true); // new layer got inserted } diff --git a/src/db/unit_tests/dbTriangleTests.cc b/src/db/unit_tests/dbTriangleTests.cc index fb6aba531..3fcf703c1 100644 --- a/src/db/unit_tests/dbTriangleTests.cc +++ b/src/db/unit_tests/dbTriangleTests.cc @@ -25,6 +25,7 @@ #include "tlUnitTest.h" #include +#include class TestableTriangleEdge : public db::TriangleEdge diff --git a/src/db/unit_tests/dbVectorTests.cc b/src/db/unit_tests/dbVectorTests.cc index 9f4361920..999ee0f12 100644 --- a/src/db/unit_tests/dbVectorTests.cc +++ b/src/db/unit_tests/dbVectorTests.cc @@ -142,9 +142,9 @@ TEST(6) EXPECT_EQ (db::vprod_with_sign (db::Vector (1000000000, 0), db::Vector (1000000000, -1)).second, -1); EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 0)), 0); - EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 1e-7)), 0); + EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 1e-11)), 0); EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 0.0001)), 1); - EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -1e-7)), 0); + EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -1e-11)), 0); EXPECT_EQ (db::sprod_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -0.0001)), -1); EXPECT_EQ (db::sprod_sign (db::DVector (100000.0000, 0), db::DVector (0, 100000.0000)), 0); EXPECT_EQ (db::sprod_sign (db::DVector (100000.0000, 0), db::DVector (0.0001, 100000.0000)), 1); @@ -157,9 +157,9 @@ TEST(6) EXPECT_EQ (db::vprod_sign (db::DVector (100000.0000, 0), db::DVector (100000.0000, -0.0001)), -1); EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 0)).second, 0); - EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 1e-7)).second, 0); + EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 1e-11)).second, 0); EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, 0.0001)).second, 1); - EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -1e-7)).second, 0); + EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -1e-11)).second, 0); EXPECT_EQ (db::sprod_with_sign (db::DVector (0, 100000.0000), db::DVector (100000.0000, -0.0001)).second, -1); EXPECT_EQ (db::sprod_with_sign (db::DVector (100000.0000, 0), db::DVector (0, 100000.0000)).second, 0); EXPECT_EQ (db::sprod_with_sign (db::DVector (100000.0000, 0), db::DVector (0.0001, 100000.0000)).second, 1);