1 | /* |
2 | * Copyright (C) 2016 Apple Inc. All rights reserved. |
3 | * |
4 | * Redistribution and use in source and binary forms, with or without |
5 | * modification, are permitted provided that the following conditions |
6 | * are met: |
7 | * 1. Redistributions of source code must retain the above copyright |
8 | * notice, this list of conditions and the following disclaimer. |
9 | * 2. Redistributions in binary form must reproduce the above copyright |
10 | * notice, this list of conditions and the following disclaimer in the |
11 | * documentation and/or other materials provided with the distribution. |
12 | * |
13 | * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
14 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
15 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
16 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
17 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
18 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
19 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
20 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
21 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
22 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
23 | * THE POSSIBILITY OF SUCH DAMAGE. |
24 | */ |
25 | |
26 | #include "config.h" |
27 | |
28 | #include <wtf/UniqueRef.h> |
29 | #include <wtf/Vector.h> |
30 | |
31 | namespace TestWebKitAPI { |
32 | |
33 | class A { }; |
34 | class B { |
35 | public: |
36 | B(int a, int b, int c) |
37 | : a(a) |
38 | , b(b) |
39 | , c(c) |
40 | { }; |
41 | int a; |
42 | int b; |
43 | int c; |
44 | }; |
45 | class C { |
46 | public: |
47 | C(UniqueRef<A>&& a) |
48 | : a(WTFMove(a)) |
49 | { } |
50 | UniqueRef<A> a; |
51 | }; |
52 | class D : public A { }; |
53 | |
54 | void function(const UniqueRef<A> a) |
55 | { |
56 | const A& b = a.get(); |
57 | const A* c = &a; |
58 | UNUSED_PARAM(b); |
59 | UNUSED_PARAM(c); |
60 | } |
61 | |
62 | TEST(WTF, UniqueRef) |
63 | { |
64 | UniqueRef<A> a = makeUniqueRef<A>(); |
65 | UniqueRef<B> b = makeUniqueRef<B>(1, 2, 3); |
66 | B& c = b.get(); |
67 | const B& d = b.get(); |
68 | B* e = &b; |
69 | const B* f = &b; |
70 | UniqueRef<A> j = WTFMove(a); |
71 | |
72 | Vector<UniqueRef<B>> v; |
73 | v.append(makeUniqueRef<B>(4, 5, 6)); |
74 | v.append(makeUniqueRef<B>(7, 8, 9)); |
75 | UniqueRef<B> g = v.takeLast(); |
76 | ASSERT_EQ(g->b, 8); |
77 | ASSERT_EQ(v.last()->b, 5); |
78 | |
79 | C h(makeUniqueRef<A>()); |
80 | C i(makeUniqueRef<D>()); |
81 | |
82 | UNUSED_PARAM(b); |
83 | UNUSED_PARAM(c); |
84 | UNUSED_PARAM(d); |
85 | UNUSED_PARAM(e); |
86 | UNUSED_PARAM(f); |
87 | UNUSED_PARAM(g); |
88 | UNUSED_PARAM(h); |
89 | UNUSED_PARAM(i); |
90 | UNUSED_PARAM(j); |
91 | } |
92 | |
93 | } // namespace TestWebKitAPI |
94 | |