diff --git a/include/base/dof_object.h b/include/base/dof_object.h index 8591ea085db..49f7fab0fc6 100644 --- a/include/base/dof_object.h +++ b/include/base/dof_object.h @@ -67,7 +67,6 @@ class DofObject : public ReferenceCountedObject /** * Copy-constructor. - */ DofObject (const DofObject&); @@ -446,6 +445,13 @@ class DofObject : public ReferenceCountedObject * The ending index for system \p s. */ unsigned int end_idx(const unsigned int s) const; + + // methods only available for unit testing +#ifdef LIBMESH_IS_UNIT_TESTING +public: + void set_buffer (const std::vector &buf) + { _idx_buf = buf; } +#endif }; diff --git a/tests/Makefile.am b/tests/Makefile.am index 6dff518e5f7..0f64941567b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -3,7 +3,8 @@ AUTOMAKE_OPTIONS = subdir-objects AM_CXXFLAGS = $(libmesh_CXXFLAGS) AM_CFLAGS = $(libmesh_CFLAGS) AM_CPPFLAGS = $(libmesh_optional_INCLUDES) -I$(top_builddir)/include \ - $(libmesh_contrib_INCLUDES) $(CPPUNIT_CFLAGS) + $(libmesh_contrib_INCLUDES) $(CPPUNIT_CFLAGS) \ + -DLIBMESH_IS_UNIT_TESTING LIBS = $(libmesh_optional_LIBS) $(CPPUNIT_LIBS) unit_tests_sources = \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 15f6da30af3..fead2feb6e4 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -572,7 +572,8 @@ AUTOMAKE_OPTIONS = subdir-objects AM_CXXFLAGS = $(libmesh_CXXFLAGS) AM_CFLAGS = $(libmesh_CFLAGS) AM_CPPFLAGS = $(libmesh_optional_INCLUDES) -I$(top_builddir)/include \ - $(libmesh_contrib_INCLUDES) $(CPPUNIT_CFLAGS) + $(libmesh_contrib_INCLUDES) $(CPPUNIT_CFLAGS) \ + -DLIBMESH_IS_UNIT_TESTING unit_tests_sources = \ driver.C \ diff --git a/tests/base/dof_object_test.h b/tests/base/dof_object_test.h index c16368ebfca..32da9b19f73 100644 --- a/tests/base/dof_object_test.h +++ b/tests/base/dof_object_test.h @@ -12,7 +12,8 @@ CPPUNIT_TEST( testValidProcId ); \ CPPUNIT_TEST( testInvalidateProcId ); \ CPPUNIT_TEST( testSetNSystems ); \ - CPPUNIT_TEST( testSetNVariableGroups ); + CPPUNIT_TEST( testSetNVariableGroups ); \ + CPPUNIT_TEST( testJensEftangBug ); using namespace libMesh; @@ -119,6 +120,40 @@ class DofObjectTest { CPPUNIT_ASSERT_EQUAL( nvpg[vg], aobject.n_vars(s,vg) ); } } + + void testJensEftangBug() + { + libmesh_here(); + std::cout << "Debugging DofObject buffer\n" + << " https://sourceforge.net/mailarchive/forum.php?thread_name=50C8EE7C.8090405%40gmail.com&forum_name=libmesh-users\n"; + + DofObject aobject(*instance); + unsigned int buf0[] = {2, 8, 257, 0, 257, 96, 257, 192, 257, 0}; + aobject.set_buffer(std::vector(buf0, buf0+10)); + aobject.debug_buffer(); + std::cout << "aobject.dof_number(0,0,0)=" << aobject.dof_number(0,0,0) << '\n' + << "aobject.dof_number(0,1,0)=" << aobject.dof_number(0,1,0) << '\n' + << "aobject.dof_number(0,2,0)=" << aobject.dof_number(0,2,0) << '\n' + << "aobject.dof_number(1,0,0)=" << aobject.dof_number(1,0,0) << '\n'; + + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,0,0), (unsigned int) 0); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,1,0), (unsigned int) 96); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,2,0), (unsigned int) 192); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(1,0,0), (unsigned int) 0); + + unsigned int buf1[] = {2, 8, 257, 1, 257, 97, 257, 193, 257, 1}; + aobject.set_buffer(std::vector(buf1, buf1+10)); + aobject.debug_buffer(); + std::cout << "aobject.dof_number(0,0,0)=" << aobject.dof_number(0,0,0) << '\n' + << "aobject.dof_number(0,1,0)=" << aobject.dof_number(0,1,0) << '\n' + << "aobject.dof_number(0,2,0)=" << aobject.dof_number(0,2,0) << '\n' + << "aobject.dof_number(1,0,0)=" << aobject.dof_number(1,0,0) << '\n'; + + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,0,0), (unsigned int) 1); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,1,0), (unsigned int) 97); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(0,2,0), (unsigned int) 193); + CPPUNIT_ASSERT_EQUAL (aobject.dof_number(1,0,0), (unsigned int) 1); + } }; #endif // #ifdef __dof_object_test_h__