File tree Expand file tree Collapse file tree 3 files changed +26
-6
lines changed
Expand file tree Collapse file tree 3 files changed +26
-6
lines changed Original file line number Diff line number Diff line change @@ -57,12 +57,12 @@ namespace poly {
5757 /* * Copy from a Polynomial. */
5858 Polynomial (const Polynomial& p);
5959 /* * Move from a Polynomial. */
60- Polynomial (Polynomial&& p);
60+ Polynomial (Polynomial&& p) noexcept ;
6161
6262 /* * Copy from a Polynomial. */
6363 Polynomial& operator =(const Polynomial& p);
6464 /* * Move from a Polynomial. */
65- Polynomial& operator =(Polynomial&& p);
65+ Polynomial& operator =(Polynomial&& p) noexcept ;
6666
6767 /* * Get a non-const pointer to the internal lp_polynomial_t. Handle with
6868 * care!
Original file line number Diff line number Diff line change 55#include " variable_list.h"
66
77#include < cassert>
8+ #include < utility>
89
910namespace poly {
1011
@@ -68,15 +69,15 @@ namespace poly {
6869
6970 Polynomial::Polynomial (const Polynomial& p)
7071 : mPoly (lp_polynomial_new_copy(p.get_internal()), polynomial_deleter) {}
71- Polynomial::Polynomial (Polynomial&& p)
72- : mPoly (lp_polynomial_new_copy (p.get_internal()), polynomial_deleter ) {}
72+ Polynomial::Polynomial (Polynomial&& p) noexcept
73+ : mPoly (std::move (p.mPoly ) ) {}
7374
7475 Polynomial& Polynomial::operator =(const Polynomial& p) {
7576 mPoly .reset (lp_polynomial_new_copy (p.get_internal ()));
7677 return *this ;
7778 }
78- Polynomial& Polynomial::operator =(Polynomial&& p) {
79- mPoly . reset (p.release () );
79+ Polynomial& Polynomial::operator =(Polynomial&& p) noexcept {
80+ mPoly = std::move (p.mPoly );
8081 return *this ;
8182 }
8283
Original file line number Diff line number Diff line change @@ -81,3 +81,22 @@ TEST_CASE("polynomial::operator<<") {
8181 out << p;
8282 CHECK (out.str () == " 1*x^6 + 2*x^5 + (3*y - 1)" );
8383}
84+
85+ TEST_CASE (" polynomial::constructor" ) {
86+ Variable y (" y" );
87+ Variable x (" x" );
88+ Polynomial p = 1 * pow (x, 6 ) + 2 * pow (x, 5 ) + 3 * y - 1 ;
89+ lp_polynomial_t * ptr = p.get_internal ();
90+
91+ Polynomial p_cp (p);
92+ Polynomial p_mv (std::move (p));
93+ CHECK (ptr == p_mv.get_internal ());
94+ CHECK (ptr != p_cp.get_internal ());
95+ CHECK (p_cp == p_mv);
96+
97+ Polynomial p_mv_a, p_cp_a;
98+ p_cp_a = p_cp;
99+ p_mv_a = std::move (p_mv);
100+ CHECK (p_cp == p_cp_a);
101+ CHECK (ptr == p_mv_a.get_internal ());
102+ }
You can’t perform that action at this time.
0 commit comments