Index: tests/smart-pointers.cfa
===================================================================
--- tests/smart-pointers.cfa	(revision 9246ec649e94f19e1eabc9b5f8076914a8168735)
+++ tests/smart-pointers.cfa	(revision 9246ec649e94f19e1eabc9b5f8076914a8168735)
@@ -0,0 +1,59 @@
+// Testing the smart pointers (counter_ptr and unique_ptr).
+
+#include <memory.hfa>
+#include <stdlib.hfa>
+
+void counter_test(void) {
+	counter_ptr(int) ptr0 = 3;
+
+	{
+		counter_ptr(int) ptr1 = ptr0;
+		*ptr1 = -7;
+	}
+	assert(-7 == *ptr0);
+
+	{
+		counter_ptr(int) ptr2 = 4;
+		ptr0 = ptr2;
+	}
+	assert(4 == *ptr0);
+
+	{
+		counter_ptr(int) ptr3 = ptr0;
+		counter_ptr(int) ptr4 = ptr0;
+	}
+}
+
+void unique_test(void) {
+	unique_ptr(char) ptr_a = 'a';
+	unique_ptr(char) ptr_b = 'b';
+	move(ptr_a, ptr_b);
+	assert(ptr_b == 0);
+	assert(*ptr_a == 'b');
+
+	unique_ptr(char) ptr_c = 'c';
+	ptr_c = 0;
+}
+
+void pointer_equality(void) {
+	{
+		counter_ptr(int) null = 0p;
+		assert(null == 0);
+		counter_ptr(int) hold = -7;
+		assert(hold != 0);
+		counter_ptr(int) twin = hold;
+		assert(hold == twin);
+	}
+	{
+		unique_ptr(int) null = 0p;
+		assert(null == 0);
+		unique_ptr(int) hold = -7;
+		assert(hold != 0);
+	}
+}
+
+int main(int argc, char * argv[]) {
+	counter_test();
+	unique_test();
+	pointer_equality();
+}
