|  | /* | 
|  | * Copyright 2018 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "src/core/SkTLazy.h" | 
|  | #include "tests/Test.h" | 
|  |  | 
|  | DEF_TEST(TLazy_copy, r) { | 
|  | SkTLazy<int> lazy; | 
|  |  | 
|  | REPORTER_ASSERT(r, !lazy.isValid()); | 
|  | REPORTER_ASSERT(r, lazy.getMaybeNull() == nullptr); | 
|  |  | 
|  | { | 
|  | SkTLazy<int> lazy_copy(lazy); | 
|  | REPORTER_ASSERT(r, !lazy_copy.isValid()); | 
|  | REPORTER_ASSERT(r, lazy_copy.getMaybeNull() == nullptr); | 
|  | } | 
|  |  | 
|  | lazy.init(42); | 
|  |  | 
|  | REPORTER_ASSERT(r, lazy.isValid()); | 
|  | REPORTER_ASSERT(r, 42 == *lazy.get()); | 
|  |  | 
|  | { | 
|  | SkTLazy<int> lazy_copy(lazy); | 
|  | REPORTER_ASSERT(r, lazy_copy.isValid()); | 
|  | REPORTER_ASSERT(r, 42 == *lazy_copy.get()); | 
|  | REPORTER_ASSERT(r, lazy.get() != lazy_copy.get()); | 
|  | } | 
|  | } | 
|  |  | 
|  | DEF_TEST(TCopyOnFirstWrite_copy, r) { | 
|  | const int v = 42; | 
|  |  | 
|  | SkTCopyOnFirstWrite<int> cow(v); | 
|  |  | 
|  | REPORTER_ASSERT(r, 42 == *cow); | 
|  | REPORTER_ASSERT(r, &v ==  cow.get()); | 
|  |  | 
|  | { | 
|  | SkTCopyOnFirstWrite<int> cow_copy(cow); | 
|  | REPORTER_ASSERT(r, 42 == *cow_copy); | 
|  | REPORTER_ASSERT(r, &v ==  cow_copy.get()); | 
|  | REPORTER_ASSERT(r, cow.get() ==  cow_copy.get()); | 
|  |  | 
|  | *cow_copy.writable() = 43; | 
|  | REPORTER_ASSERT(r, 42 == *cow); | 
|  | REPORTER_ASSERT(r, &v ==  cow.get()); | 
|  | REPORTER_ASSERT(r, 43 == *cow_copy); | 
|  | REPORTER_ASSERT(r, &v !=  cow_copy.get()); | 
|  | REPORTER_ASSERT(r, cow.get() !=  cow_copy.get()); | 
|  | } | 
|  |  | 
|  | *cow.writable() = 43; | 
|  |  | 
|  | REPORTER_ASSERT(r, 43 == *cow); | 
|  | REPORTER_ASSERT(r, &v !=  cow.get()); | 
|  |  | 
|  | { | 
|  | SkTCopyOnFirstWrite<int> cow_copy(cow); | 
|  | REPORTER_ASSERT(r, 43 == *cow_copy); | 
|  | REPORTER_ASSERT(r, &v !=  cow_copy.get()); | 
|  | REPORTER_ASSERT(r, cow.get() !=  cow_copy.get()); | 
|  |  | 
|  | *cow_copy.writable() = 44; | 
|  |  | 
|  | REPORTER_ASSERT(r, 43 == *cow); | 
|  | REPORTER_ASSERT(r, &v !=  cow.get()); | 
|  | REPORTER_ASSERT(r, 44 == *cow_copy); | 
|  | REPORTER_ASSERT(r, &v !=  cow_copy.get()); | 
|  | REPORTER_ASSERT(r, cow.get() !=  cow_copy.get()); | 
|  | } | 
|  | } |