1 /*++ 2 Copyright (c) 2006 Microsoft Corporation 3 4 Module Name: 5 6 tst_optional.cpp 7 8 Abstract: 9 10 Test optional module 11 12 Author: 13 14 Leonardo de Moura (leonardo) 2006-09-29. 15 16 Revision History: 17 18 --*/ 19 #include "util/trace.h" 20 #include "util/debug.h" 21 #include "util/memory_manager.h" 22 #include "util/optional.h" 23 tst1()24static void tst1() { 25 optional<int> v; 26 ENSURE(!v); 27 ENSURE(v == false); 28 v = 10; 29 ENSURE(v); 30 ENSURE(*v == 10); 31 TRACE("optional", tout << sizeof(v) << "\n";); 32 } 33 34 struct OptFoo { 35 int m_x; 36 int m_y; 37 OptFooOptFoo38 OptFoo(int x, int y):m_x(x), m_y(y) { 39 TRACE("optional", tout << "OptFoo created: " << m_x << " : " << m_y << "\n";); 40 } 41 ~OptFooOptFoo42 ~OptFoo() { 43 TRACE("optional", tout << "OptFoo deleted: " << m_x << " : " << m_y << "\n";); 44 } 45 }; 46 tst2()47static void tst2() { 48 optional<OptFoo> v; 49 ENSURE(!v); 50 v = OptFoo(10, 20); 51 ENSURE(v->m_x == 10); 52 ENSURE(v->m_y == 20); 53 v = OptFoo(200, 300); 54 ENSURE(v->m_x == 200); 55 ENSURE(v->m_y == 300); 56 TRACE("optional", tout << sizeof(v) << "\n";); 57 } 58 tst3()59static void tst3() { 60 optional<int *> v; 61 ENSURE(!v); 62 int x = 10; 63 v = &x; 64 ENSURE(v); 65 ENSURE(*v == &x); 66 TRACE("optional", tout << sizeof(v) << "\n";); 67 ENSURE(*(*v) == 10); 68 } 69 tst_optional()70void tst_optional() { 71 tst1(); 72 tst2(); 73 tst3(); 74 } 75 76