Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: cc/base/rtree_unittest.cc

Issue 2881063003: cc: Change RTree::Search to return results, add comments, more tests. (Closed)
Patch Set: update Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/base/rtree_perftest.cc ('k') | cc/paint/discardable_image_map.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/base/rtree.h" 5 #include "cc/base/rtree.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 17 matching lines...) Expand all
28 std::vector<gfx::Rect> rects; 28 std::vector<gfx::Rect> rects;
29 for (int y = 0; y < 50; ++y) { 29 for (int y = 0; y < 50; ++y) {
30 for (int x = 0; x < 50; ++x) { 30 for (int x = 0; x < 50; ++x) {
31 rects.push_back(gfx::Rect(x, y, 1, 1)); 31 rects.push_back(gfx::Rect(x, y, 1, 1));
32 } 32 }
33 } 33 }
34 34
35 RTree rtree; 35 RTree rtree;
36 rtree.Build(rects); 36 rtree.Build(rects);
37 37
38 std::vector<size_t> results; 38 std::vector<size_t> results = rtree.Search(gfx::Rect(0, 0, 50, 50));
39 rtree.Search(gfx::Rect(0, 0, 50, 50), &results);
40 ASSERT_EQ(2500u, results.size()); 39 ASSERT_EQ(2500u, results.size());
40 // Note that the results have to be sorted.
41 for (size_t i = 0; i < 2500; ++i) { 41 for (size_t i = 0; i < 2500; ++i) {
42 ASSERT_EQ(results[i], i); 42 ASSERT_EQ(results[i], i);
43 } 43 }
44 44
45 results.clear(); 45 results = rtree.Search(gfx::Rect(0, 0, 50, 49));
46 rtree.Search(gfx::Rect(0, 0, 50, 49), &results);
47 ASSERT_EQ(2450u, results.size()); 46 ASSERT_EQ(2450u, results.size());
48 for (size_t i = 0; i < 2450; ++i) { 47 for (size_t i = 0; i < 2450; ++i) {
49 ASSERT_EQ(results[i], i); 48 ASSERT_EQ(results[i], i);
50 } 49 }
51 50
52 results.clear(); 51 results = rtree.Search(gfx::Rect(5, 6, 1, 1));
53 rtree.Search(gfx::Rect(5, 6, 1, 1), &results);
54 ASSERT_EQ(1u, results.size()); 52 ASSERT_EQ(1u, results.size());
55 EXPECT_EQ(6u * 50 + 5u, results[0]); 53 EXPECT_EQ(6u * 50 + 5u, results[0]);
56 } 54 }
57 55
58 TEST(RTreeTest, Overlap) { 56 TEST(RTreeTest, Overlap) {
59 std::vector<gfx::Rect> rects; 57 std::vector<gfx::Rect> rects;
60 for (int h = 1; h <= 50; ++h) { 58 for (int h = 1; h <= 50; ++h) {
61 for (int w = 1; w <= 50; ++w) { 59 for (int w = 1; w <= 50; ++w) {
62 rects.push_back(gfx::Rect(0, 0, w, h)); 60 rects.push_back(gfx::Rect(0, 0, w, h));
63 } 61 }
64 } 62 }
65 63
66 RTree rtree; 64 RTree rtree;
67 rtree.Build(rects); 65 rtree.Build(rects);
68 66
69 std::vector<size_t> results; 67 std::vector<size_t> results = rtree.Search(gfx::Rect(0, 0, 1, 1));
70 rtree.Search(gfx::Rect(0, 0, 1, 1), &results);
71 ASSERT_EQ(2500u, results.size()); 68 ASSERT_EQ(2500u, results.size());
69 // Both the checks for the elements assume elements are sorted.
72 for (size_t i = 0; i < 2500; ++i) { 70 for (size_t i = 0; i < 2500; ++i) {
73 ASSERT_EQ(results[i], i); 71 ASSERT_EQ(results[i], i);
74 } 72 }
75 73
76 results.clear(); 74 results = rtree.Search(gfx::Rect(0, 49, 1, 1));
77 rtree.Search(gfx::Rect(0, 49, 1, 1), &results);
78 ASSERT_EQ(50u, results.size()); 75 ASSERT_EQ(50u, results.size());
79 for (size_t i = 0; i < 50; ++i) { 76 for (size_t i = 0; i < 50; ++i) {
80 EXPECT_EQ(results[i], 2450u + i); 77 EXPECT_EQ(results[i], 2450u + i);
81 } 78 }
82 } 79 }
83 80
81 static void VerifySorted(const std::vector<size_t>& results) {
82 for (size_t i = 1; i < results.size(); ++i) {
83 ASSERT_LT(results[i - 1], results[i]);
84 }
85 }
86
87 TEST(RTreeTest, SortedResults) {
88 // This test verifies that all queries return sorted elements.
89 std::vector<gfx::Rect> rects;
90 for (int y = 0; y < 50; ++y) {
91 for (int x = 0; x < 50; ++x) {
92 rects.push_back(gfx::Rect(x, y, 1, 1));
93 rects.push_back(gfx::Rect(x, y, 2, 2));
94 rects.push_back(gfx::Rect(x, y, 3, 3));
95 }
96 }
97
98 RTree rtree;
99 rtree.Build(rects);
100
101 for (int y = 0; y < 50; ++y) {
102 for (int x = 0; x < 50; ++x) {
103 VerifySorted(rtree.Search(gfx::Rect(x, y, 1, 1)));
104 VerifySorted(rtree.Search(gfx::Rect(x, y, 50, 1)));
105 VerifySorted(rtree.Search(gfx::Rect(x, y, 1, 50)));
106 }
107 }
108 }
109
84 TEST(RTreeTest, GetBoundsEmpty) { 110 TEST(RTreeTest, GetBoundsEmpty) {
85 RTree rtree; 111 RTree rtree;
86 ASSERT_EQ(gfx::Rect(), rtree.GetBounds()); 112 ASSERT_EQ(gfx::Rect(), rtree.GetBounds());
87 } 113 }
88 114
89 TEST(RTreeTest, GetBoundsNonOverlapping) { 115 TEST(RTreeTest, GetBoundsNonOverlapping) {
90 std::vector<gfx::Rect> rects; 116 std::vector<gfx::Rect> rects;
91 rects.push_back(gfx::Rect(5, 6, 7, 8)); 117 rects.push_back(gfx::Rect(5, 6, 7, 8));
92 rects.push_back(gfx::Rect(11, 12, 13, 14)); 118 rects.push_back(gfx::Rect(11, 12, 13, 14));
93 119
94 RTree rtree; 120 RTree rtree;
95 rtree.Build(rects); 121 rtree.Build(rects);
96 122
97 ASSERT_EQ(gfx::Rect(5, 6, 19, 20), rtree.GetBounds()); 123 ASSERT_EQ(gfx::Rect(5, 6, 19, 20), rtree.GetBounds());
98 } 124 }
99 125
100 TEST(RTreeTest, GetBoundsOverlapping) { 126 TEST(RTreeTest, GetBoundsOverlapping) {
101 std::vector<gfx::Rect> rects; 127 std::vector<gfx::Rect> rects;
102 rects.push_back(gfx::Rect(0, 0, 10, 10)); 128 rects.push_back(gfx::Rect(0, 0, 10, 10));
103 rects.push_back(gfx::Rect(5, 5, 5, 5)); 129 rects.push_back(gfx::Rect(5, 5, 5, 5));
104 130
105 RTree rtree; 131 RTree rtree;
106 rtree.Build(rects); 132 rtree.Build(rects);
107 133
108 ASSERT_EQ(gfx::Rect(0, 0, 10, 10), rtree.GetBounds()); 134 ASSERT_EQ(gfx::Rect(0, 0, 10, 10), rtree.GetBounds());
109 } 135 }
110 136
111 } // namespace cc 137 } // namespace cc
OLDNEW
« no previous file with comments | « cc/base/rtree_perftest.cc ('k') | cc/paint/discardable_image_map.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698