summaryrefslogtreecommitdiff
path: root/asl/base/defer_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/base/defer_tests.cpp')
-rw-r--r--asl/base/defer_tests.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/asl/base/defer_tests.cpp b/asl/base/defer_tests.cpp
new file mode 100644
index 0000000..b5139d5
--- /dev/null
+++ b/asl/base/defer_tests.cpp
@@ -0,0 +1,32 @@
+#include "asl/base/defer.hpp"
+#include "asl/testing/testing.hpp"
+
+ASL_TEST(defer)
+{
+ uint32_t a = 0;
+
+ {
+ ASL_DEFER [&a]() { a |= 1; };
+ ASL_TEST_EXPECT(a == 0);
+
+ {
+ ASL_DEFER [&a]() { a |= 2; };
+ ASL_DEFER [&a]() { a |= 4; };
+ ASL_TEST_EXPECT(a == 0);
+ }
+
+ ASL_TEST_EXPECT(a == 6);
+
+ {
+ ASL_DEFER [&a]() { a |= 8; };
+ ASL_TEST_EXPECT(a == 6);
+ }
+
+ ASL_TEST_EXPECT(a == 14);
+
+ ASL_DEFER [&a]() { a |= 16; };
+ ASL_TEST_EXPECT(a == 14);
+ }
+
+ ASL_TEST_EXPECT(a == 31);
+}