Add a Makefile.
[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 #include "zcpointer.h"
18
19 class C {
20 public:
21 ~C() {
22 std::cout << "~C" << std::endl;
23 }
24
25 void DoThing() {
26 std::cout << "DoThing" << std::endl;
27 }
28 };
29
30 void TestReset() {
31 zc::owned<C> c(new C());
32 zc::ref<C> owned = c.get();
33 zc::ref<C> owned2 = owned;
34 c.reset();
35 owned2->DoThing();
36 }
37
38 template <typename T>
39 void TestUnwrap() {
40 zc::owned<T> t(new T());
41 T* unwrap = t.get();
42 }
43
44 void TestMove() {
45 zc::owned<C> c(new C());
46 zc::ref<C> owned = c.get();
47
48 zc::owned<C> c2(std::move(c));
49 owned->DoThing();
50
51 c2.reset();
52 owned->DoThing();
53 }
54
55 int main() {
56 TestMove();
57 }