TLazyTest.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include "src/core/SkTLazy.h"
  8. #include "tests/Test.h"
  9. DEF_TEST(TLazy_copy, r) {
  10. SkTLazy<int> lazy;
  11. REPORTER_ASSERT(r, !lazy.isValid());
  12. REPORTER_ASSERT(r, lazy.getMaybeNull() == nullptr);
  13. {
  14. SkTLazy<int> lazy_copy(lazy);
  15. REPORTER_ASSERT(r, !lazy_copy.isValid());
  16. REPORTER_ASSERT(r, lazy_copy.getMaybeNull() == nullptr);
  17. }
  18. lazy.init(42);
  19. REPORTER_ASSERT(r, lazy.isValid());
  20. REPORTER_ASSERT(r, 42 == *lazy.get());
  21. {
  22. SkTLazy<int> lazy_copy(lazy);
  23. REPORTER_ASSERT(r, lazy_copy.isValid());
  24. REPORTER_ASSERT(r, 42 == *lazy_copy.get());
  25. REPORTER_ASSERT(r, lazy.get() != lazy_copy.get());
  26. }
  27. }
  28. DEF_TEST(TCopyOnFirstWrite_copy, r) {
  29. const int v = 42;
  30. SkTCopyOnFirstWrite<int> cow(v);
  31. REPORTER_ASSERT(r, 42 == *cow);
  32. REPORTER_ASSERT(r, &v == cow.get());
  33. {
  34. SkTCopyOnFirstWrite<int> cow_copy(cow);
  35. REPORTER_ASSERT(r, 42 == *cow_copy);
  36. REPORTER_ASSERT(r, &v == cow_copy.get());
  37. REPORTER_ASSERT(r, cow.get() == cow_copy.get());
  38. *cow_copy.writable() = 43;
  39. REPORTER_ASSERT(r, 42 == *cow);
  40. REPORTER_ASSERT(r, &v == cow.get());
  41. REPORTER_ASSERT(r, 43 == *cow_copy);
  42. REPORTER_ASSERT(r, &v != cow_copy.get());
  43. REPORTER_ASSERT(r, cow.get() != cow_copy.get());
  44. }
  45. *cow.writable() = 43;
  46. REPORTER_ASSERT(r, 43 == *cow);
  47. REPORTER_ASSERT(r, &v != cow.get());
  48. {
  49. SkTCopyOnFirstWrite<int> cow_copy(cow);
  50. REPORTER_ASSERT(r, 43 == *cow_copy);
  51. REPORTER_ASSERT(r, &v != cow_copy.get());
  52. REPORTER_ASSERT(r, cow.get() != cow_copy.get());
  53. *cow_copy.writable() = 44;
  54. REPORTER_ASSERT(r, 43 == *cow);
  55. REPORTER_ASSERT(r, &v != cow.get());
  56. REPORTER_ASSERT(r, 44 == *cow_copy);
  57. REPORTER_ASSERT(r, &v != cow_copy.get());
  58. REPORTER_ASSERT(r, cow.get() != cow_copy.get());
  59. }
  60. }