3c1e152bab20e3fc88669129df30b2a750fd4e20
[zcpointer.git] / test.cc
1 // Copyright 2016 Google Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include <iostream>
16
17 #define ZCPOINTER_TRACK_REFS 1
18
19 #include "zcpointer.h"
20
21 class C {
22 public:
23 ~C() {
24 std::cout << "~C" << std::endl;
25 }
26
27 void DoThing() {
28 std::cout << "DoThing" << std::endl;
29 }
30 };
31
32 void TestReset() {
33 zc::owned<C> c(new C());
34 zc::ref<C> owned = c.get();
35 zc::ref<C> owned2 = owned;
36 c.reset();
37 owned2->DoThing();
38 }
39
40 template <typename T>
41 void TestUnwrap() {
42 zc::owned<T> t(new T());
43 T* unwrap = t.get();
44 }
45
46 void TestMove() {
47 zc::owned<C> c(new C());
48 zc::ref<C> owned = c.get();
49
50 zc::owned<C> c2(std::move(c));
51 owned->DoThing();
52
53 c2.reset();
54 owned->DoThing();
55 }
56
57 int main() {
58 TestMove();
59 }