• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright 2018 Google Inc.
3   *
4   * Use of this source code is governed by a BSD-style license that can be
5   * found in the LICENSE file.
6   */
7  
8  #include "src/core/SkTLazy.h"
9  #include "tests/Test.h"
10  
DEF_TEST(TLazy_copy,r)11  DEF_TEST(TLazy_copy, r) {
12      SkTLazy<int> lazy;
13  
14      REPORTER_ASSERT(r, !lazy.isValid());
15      REPORTER_ASSERT(r, lazy.getMaybeNull() == nullptr);
16  
17      {
18          SkTLazy<int> lazy_copy(lazy);  // NOLINT(performance-unnecessary-copy-initialization)
19          REPORTER_ASSERT(r, !lazy_copy.isValid());
20          REPORTER_ASSERT(r, lazy_copy.getMaybeNull() == nullptr);
21      }
22  
23      lazy.init(42);
24  
25      REPORTER_ASSERT(r, lazy.isValid());
26      REPORTER_ASSERT(r, 42 == *lazy.get());
27  
28      {
29          SkTLazy<int> lazy_copy(lazy);  // NOLINT(performance-unnecessary-copy-initialization)
30          REPORTER_ASSERT(r, lazy_copy.isValid());
31          REPORTER_ASSERT(r, 42 == *lazy_copy.get());
32          REPORTER_ASSERT(r, lazy.get() != lazy_copy.get());
33      }
34  }
35  
DEF_TEST(TCopyOnFirstWrite_copy,r)36  DEF_TEST(TCopyOnFirstWrite_copy, r) {
37      const int v = 42;
38  
39      SkTCopyOnFirstWrite<int> cow(v);
40  
41      REPORTER_ASSERT(r, 42 == *cow);
42      REPORTER_ASSERT(r, &v ==  cow.get());
43  
44      {
45          SkTCopyOnFirstWrite<int> cow_copy(cow);
46          REPORTER_ASSERT(r, 42 == *cow_copy);
47          REPORTER_ASSERT(r, &v ==  cow_copy.get());
48          REPORTER_ASSERT(r, cow.get() ==  cow_copy.get());
49  
50          *cow_copy.writable() = 43;
51          REPORTER_ASSERT(r, 42 == *cow);
52          REPORTER_ASSERT(r, &v ==  cow.get());
53          REPORTER_ASSERT(r, 43 == *cow_copy);
54          REPORTER_ASSERT(r, &v !=  cow_copy.get());
55          REPORTER_ASSERT(r, cow.get() !=  cow_copy.get());
56      }
57  
58      *cow.writable() = 43;
59  
60      REPORTER_ASSERT(r, 43 == *cow);
61      REPORTER_ASSERT(r, &v !=  cow.get());
62  
63      {
64          SkTCopyOnFirstWrite<int> cow_copy(cow);
65          REPORTER_ASSERT(r, 43 == *cow_copy);
66          REPORTER_ASSERT(r, &v !=  cow_copy.get());
67          REPORTER_ASSERT(r, cow.get() !=  cow_copy.get());
68  
69          *cow_copy.writable() = 44;
70  
71          REPORTER_ASSERT(r, 43 == *cow);
72          REPORTER_ASSERT(r, &v !=  cow.get());
73          REPORTER_ASSERT(r, 44 == *cow_copy);
74          REPORTER_ASSERT(r, &v !=  cow_copy.get());
75          REPORTER_ASSERT(r, cow.get() !=  cow_copy.get());
76      }
77  }
78