diff --git a/src/unittest/SConscript b/src/unittest/SConscript
index e7e2a60..09286da 100644
--- a/src/unittest/SConscript
+++ b/src/unittest/SConscript
@@ -33,6 +33,8 @@
 if env['TARGET_ISA'] == 'no':
     Return()
 
+Source('unittest.cc')
+
 UnitTest('bitvectest', 'bitvectest.cc')
 UnitTest('circletest', 'circletest.cc')
 UnitTest('cprintftest', 'cprintftest.cc')
diff --git a/src/unittest/unittest.cc b/src/unittest/unittest.cc
new file mode 100644
index 0000000..9c48a94
--- /dev/null
+++ b/src/unittest/unittest.cc
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2011 Advanced Micro Devices
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include <cstdlib>
+
+#include "base/cprintf.hh"
+#include "unittest/unittest.hh"
+
+namespace {
+
+bool _printOnPass = (getenv("PRINT_ON_PASS") != NULL);
+unsigned _passes = 0;
+unsigned _failures = 0;
+
+bool _casePrinted = false;
+const char *_case = NULL;
+
+} // anonymous namespace
+
+namespace UnitTest {
+
+void
+checkVal(const char *file, const unsigned line,
+         const char *test, const bool result)
+{
+    if (!result || _printOnPass) {
+        if (!_casePrinted && _case) {
+            cprintf("CASE %s:\n", _case);
+            _casePrinted = true;
+        }
+        cprintf("   CHECK %s:   %s:%d   %s\n",
+                result ? "PASSED" : "FAILED", file, line, test);
+    }
+    if (result) _passes++;
+    else _failures++;
+}
+
+bool printOnPass() { return _printOnPass; }
+void printOnPass(bool newPrintOnPass) { _printOnPass = newPrintOnPass; }
+
+unsigned passes() { return _passes; }
+unsigned failures() { return _failures; }
+
+unsigned
+printResults()
+{
+    cprintf("TEST %s:   %d checks passed, %d checks failed.\n",
+            _failures ? "FAILED" : "PASSED", _passes, _failures);
+    return _failures;
+}
+
+void
+reset()
+{
+    _passes = 0;
+    _failures = 0;
+}
+
+void
+setCase(const char *newCase)
+{
+    _casePrinted = false;
+    _case = newCase;
+}
+
+} //namespace UnitTest
diff --git a/src/unittest/unittest.hh b/src/unittest/unittest.hh
new file mode 100644
index 0000000..ec5f378
--- /dev/null
+++ b/src/unittest/unittest.hh
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2011 Advanced Micro Devices
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+/**
+ * @file This file defines functions and macros for use in unit tests.
+ */
+
+#ifndef __UNITTEST_UNITTEST_HH__
+#define __UNITTEST_UNITTEST_HH__
+
+namespace UnitTest {
+
+/**
+ * Function that actually handles checking whether an EXPECT_* passed. This
+ * should be used through the EXPECT macros below and not called directly.
+ * @param file The name of the file this check is in.
+ * @param line The line number this check is on.
+ * @param test Text specifying what check is being performed.
+ * @param result Whether the check passed.
+ */
+void checkVal(const char *file, const unsigned line,
+              const char *test, const bool result);
+
+/**
+ * Print on pass is a switch that specifies whether to print a message even
+ * when a check passes. It's default value is whether or not "PRINT_ON_PASS"
+ * is set in the calling environment. What it's actually set to is ignored.
+ */
+
+/**
+ * Function for retrieving the current setting for print on pass.
+ * @return The current setting.
+ */
+bool printOnPass();
+
+/**
+ * Function for setting print on pass.
+ * @param newVal The new setting.
+ */
+void printOnPass(bool newVal);
+
+/**
+ * Function that returns the current number of passed checks.
+ * @return Number of checks that have passed so far.
+ */
+unsigned passes();
+
+/**
+ * Function that returns the current number of failed checks.
+ * @return Number of checks that have failed so far.
+ */
+unsigned failures();
+
+/**
+ * Function to call at the end of a test that prints an overall result and a
+ * summary of how many checks passed and failed. main() should return the
+ * return value of this function which is the number of failed checks.
+ * @return Number of failed checks.
+ */
+unsigned printResults();
+
+/// Zero the number of passes and failures so far.
+void reset();
+
+/**
+ * Sets the current test case. Test cases are used to group checks together and
+ * describe what that group is doing. Setting a new case defines the start of
+ * a new group and the end of the previous one. The case string is used in
+ * place and not copied, so don't modify or invalidate it until a new case
+ * label is installed.
+ * @param newCase The name of the new test case.
+ */
+void setCase(const char *newCase);
+
+} // namespace UnitTest
+
+/// A macro which verifies that expr evaluates to true.
+#define EXPECT_TRUE(expr) \
+    UnitTest::checkVal(__FILE__, __LINE__, "EXPECT_TRUE(" #expr ")", (expr))
+/// A macro which verifies that expr evaluates to false.
+#define EXPECT_FALSE(expr) \
+    UnitTest::checkVal(__FILE__, __LINE__, \
+            "EXPECT_FALSE(" #expr ")", (expr) == false)
+/// A macro which verifies that lhs and rhs are equal to each other.
+#define EXPECT_EQ(lhs, rhs) \
+    UnitTest::checkVal(__FILE__, __LINE__, \
+            "EXPECT_EQ(" #lhs ", " #rhs ")", (lhs) == (rhs));
+
+#endif
