From f31397291b9212701679cd18bbb870ccec3a5732 Mon Sep 17 00:00:00 2001
From: Adam Moss <moss@lindenlab.com>
Date: Thu, 15 Oct 2009 16:59:54 +0000
Subject: [PATCH] DEV-41345 turn llmodularmath_tut into a real llmath unit
 test.

---
 indra/llmath/CMakeLists.txt               |  3 +
 indra/llmath/llmodularmath.cpp            | 36 ++++++++++
 indra/llmath/llrect.cpp                   |  2 +
 indra/llmath/tests/llmodularmath_test.cpp | 82 +++++++++++++++++++++++
 indra/test/CMakeLists.txt                 |  1 -
 indra/test/test.cpp                       |  2 +-
 6 files changed, 124 insertions(+), 2 deletions(-)
 create mode 100644 indra/llmath/llmodularmath.cpp
 create mode 100644 indra/llmath/tests/llmodularmath_test.cpp

diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index e8b84eeabdc..e4a10f83106 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -15,6 +15,7 @@ set(llmath_SOURCE_FILES
     llcamera.cpp
     llcoordframe.cpp
     llline.cpp
+    llmodularmath.cpp
     llperlin.cpp
     llquaternion.cpp
     llrect.cpp
@@ -48,6 +49,7 @@ set(llmath_HEADER_FILES
     llinterp.h
     llline.h
     llmath.h
+    llmodularmath.h
     lloctree.h
     llperlin.h
     llplane.h
@@ -87,6 +89,7 @@ include(LLAddBuildTest)
 # UNIT TESTS
 SET(llmath_TEST_SOURCE_FILES
   llbboxlocal.cpp
+  llmodularmath.cpp
   llrect.cpp
   v2math.cpp
   v3color.cpp
diff --git a/indra/llmath/llmodularmath.cpp b/indra/llmath/llmodularmath.cpp
new file mode 100644
index 00000000000..4a6553ae7c3
--- /dev/null
+++ b/indra/llmath/llmodularmath.cpp
@@ -0,0 +1,36 @@
+/** 
+ * @file llmodularmath.cpp
+ * @brief LLModularMath class implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+// implementation is all in the header, this include dep ensures the unit test is rerun if the implementation changes.
+#include "llmodularmath.h"
diff --git a/indra/llmath/llrect.cpp b/indra/llmath/llrect.cpp
index cba76dd2117..14e094792d0 100644
--- a/indra/llmath/llrect.cpp
+++ b/indra/llmath/llrect.cpp
@@ -1,5 +1,6 @@
 /** 
  * @file llrect.cpp
+ * @brief LLRect class implementation
  *
  * $LicenseInfo:firstyear=2001&license=viewergpl$
  * 
@@ -31,4 +32,5 @@
 
 #include "linden_common.h"
 
+// implementation is all in the header, this include dep ensures the unit test is rerun if the implementation changes.
 #include "llrect.h"
diff --git a/indra/llmath/tests/llmodularmath_test.cpp b/indra/llmath/tests/llmodularmath_test.cpp
new file mode 100644
index 00000000000..a998a95618b
--- /dev/null
+++ b/indra/llmath/tests/llmodularmath_test.cpp
@@ -0,0 +1,82 @@
+/**
+ * @file modularmath_tut.cpp
+ * @author babbage
+ * @date 2008-09
+ * @brief llmodularmath tests
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ * 
+ * Copyright (c) 2007-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+ 
+#include "linden_common.h"
+
+#include "../llmodularmath.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+	struct modularmath_data
+	{
+	};
+	typedef test_group<modularmath_data> modularmath_test;
+	typedef modularmath_test::object modularmath_object;
+	tut::modularmath_test modularmath_testcase("modularmath");
+
+	template<> template<>
+	void modularmath_object::test<1>()
+	{
+		// lhs < rhs
+		const U32 lhs = 0x000001;
+		const U32 rhs = 0xFFFFFF;
+		const U32 width = 24;
+		U32 result = LLModularMath::subtract<width>(lhs, rhs); 
+		ensure_equals("diff(0x000001, 0xFFFFFF, 24)", result, 2);
+	}
+
+	template<> template<>
+	void modularmath_object::test<2>()
+	{
+		// lhs > rhs
+		const U32 lhs = 0x000002;
+		const U32 rhs = 0x000001;
+		const U32 width = 24;
+		U32 result = LLModularMath::subtract<width>(lhs, rhs); 
+		ensure_equals("diff(0x000002, 0x000001, 24)", result, 1);
+	}
+
+	template<> template<>
+	void modularmath_object::test<3>()
+	{
+		// lhs == rhs
+		const U32 lhs = 0xABCDEF;
+		const U32 rhs = 0xABCDEF;
+		const U32 width = 24;
+		U32 result = LLModularMath::subtract<width>(lhs, rhs); 
+		ensure_equals("diff(0xABCDEF, 0xABCDEF, 24)", result, 0);
+	}	
+}
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index dd11a0bc7ea..db78b7b9ec7 100644
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -44,7 +44,6 @@ set(test_SOURCE_FILES
     lliohttpserver_tut.cpp
     llmime_tut.cpp
     llmessageconfig_tut.cpp
-    llmodularmath_tut.cpp
     llpermissions_tut.cpp
     llpipeutil.cpp
     llsaleinfo_tut.cpp
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
index 94766a0ba22..c2e0a11156e 100644
--- a/indra/test/test.cpp
+++ b/indra/test/test.cpp
@@ -147,7 +147,7 @@ class LLTestCallback : public tut::callback
 		stream << "\tPassed Tests:\t" << mPassedTests;
 		if (mPassedTests == mTotalTests)
 		{
-			stream << "\t\\o/ yay!!";
+			stream << "\tYAY!! \\o/";
 		}
 		stream << std::endl;
 
-- 
GitLab