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

Side by Side Diff: tests/MatrixTest.cpp

Issue 295713002: Rename SkMatrix::get(Min|Max)Stretch to get(Min|Max)Scale (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rename Created 6 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGpuGL.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkMath.h" 8 #include "SkMath.h"
9 #include "SkMatrix.h" 9 #include "SkMatrix.h"
10 #include "SkMatrixUtils.h" 10 #include "SkMatrixUtils.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 size_t size3 = m2.readFromMemory(buffer, kBufferSize); 112 size_t size3 = m2.readFromMemory(buffer, kBufferSize);
113 REPORTER_ASSERT(reporter, size1 == size3); 113 REPORTER_ASSERT(reporter, size1 == size3);
114 REPORTER_ASSERT(reporter, are_equal(reporter, m, m2)); 114 REPORTER_ASSERT(reporter, are_equal(reporter, m, m2));
115 115
116 char buffer2[kBufferSize]; 116 char buffer2[kBufferSize];
117 size3 = m2.writeToMemory(buffer2); 117 size3 = m2.writeToMemory(buffer2);
118 REPORTER_ASSERT(reporter, size1 == size3); 118 REPORTER_ASSERT(reporter, size1 == size3);
119 REPORTER_ASSERT(reporter, memcmp(buffer, buffer2, size1) == 0); 119 REPORTER_ASSERT(reporter, memcmp(buffer, buffer2, size1) == 0);
120 } 120 }
121 121
122 static void test_matrix_min_max_stretch(skiatest::Reporter* reporter) { 122 static void test_matrix_min_max_scale(skiatest::Reporter* reporter) {
123 SkMatrix identity; 123 SkMatrix identity;
124 identity.reset(); 124 identity.reset();
125 REPORTER_ASSERT(reporter, SK_Scalar1 == identity.getMinStretch()); 125 REPORTER_ASSERT(reporter, SK_Scalar1 == identity.getMinScale());
126 REPORTER_ASSERT(reporter, SK_Scalar1 == identity.getMaxStretch()); 126 REPORTER_ASSERT(reporter, SK_Scalar1 == identity.getMaxScale());
127 127
128 SkMatrix scale; 128 SkMatrix scale;
129 scale.setScale(SK_Scalar1 * 2, SK_Scalar1 * 4); 129 scale.setScale(SK_Scalar1 * 2, SK_Scalar1 * 4);
130 REPORTER_ASSERT(reporter, SK_Scalar1 * 2 == scale.getMinStretch()); 130 REPORTER_ASSERT(reporter, SK_Scalar1 * 2 == scale.getMinScale());
131 REPORTER_ASSERT(reporter, SK_Scalar1 * 4 == scale.getMaxStretch()); 131 REPORTER_ASSERT(reporter, SK_Scalar1 * 4 == scale.getMaxScale());
132 132
133 SkMatrix rot90Scale; 133 SkMatrix rot90Scale;
134 rot90Scale.setRotate(90 * SK_Scalar1); 134 rot90Scale.setRotate(90 * SK_Scalar1);
135 rot90Scale.postScale(SK_Scalar1 / 4, SK_Scalar1 / 2); 135 rot90Scale.postScale(SK_Scalar1 / 4, SK_Scalar1 / 2);
136 REPORTER_ASSERT(reporter, SK_Scalar1 / 4 == rot90Scale.getMinStretch()); 136 REPORTER_ASSERT(reporter, SK_Scalar1 / 4 == rot90Scale.getMinScale());
137 REPORTER_ASSERT(reporter, SK_Scalar1 / 2 == rot90Scale.getMaxStretch()); 137 REPORTER_ASSERT(reporter, SK_Scalar1 / 2 == rot90Scale.getMaxScale());
138 138
139 SkMatrix rotate; 139 SkMatrix rotate;
140 rotate.setRotate(128 * SK_Scalar1); 140 rotate.setRotate(128 * SK_Scalar1);
141 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SK_Scalar1, rotate.getMinStret ch() ,SK_ScalarNearlyZero)); 141 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SK_Scalar1, rotate.getMinScale () ,SK_ScalarNearlyZero));
142 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SK_Scalar1, rotate.getMaxStret ch(), SK_ScalarNearlyZero)); 142 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SK_Scalar1, rotate.getMaxScale (), SK_ScalarNearlyZero));
143 143
144 SkMatrix translate; 144 SkMatrix translate;
145 translate.setTranslate(10 * SK_Scalar1, -5 * SK_Scalar1); 145 translate.setTranslate(10 * SK_Scalar1, -5 * SK_Scalar1);
146 REPORTER_ASSERT(reporter, SK_Scalar1 == translate.getMinStretch()); 146 REPORTER_ASSERT(reporter, SK_Scalar1 == translate.getMinScale());
147 REPORTER_ASSERT(reporter, SK_Scalar1 == translate.getMaxStretch()); 147 REPORTER_ASSERT(reporter, SK_Scalar1 == translate.getMaxScale());
148 148
149 SkMatrix perspX; 149 SkMatrix perspX;
150 perspX.reset(); 150 perspX.reset();
151 perspX.setPerspX(SkScalarToPersp(SK_Scalar1 / 1000)); 151 perspX.setPerspX(SkScalarToPersp(SK_Scalar1 / 1000));
152 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspX.getMinStretch()); 152 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspX.getMinScale());
153 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspX.getMaxStretch()); 153 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspX.getMaxScale());
154 154
155 SkMatrix perspY; 155 SkMatrix perspY;
156 perspY.reset(); 156 perspY.reset();
157 perspY.setPerspY(SkScalarToPersp(-SK_Scalar1 / 500)); 157 perspY.setPerspY(SkScalarToPersp(-SK_Scalar1 / 500));
158 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspY.getMinStretch()); 158 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspY.getMinScale());
159 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspY.getMaxStretch()); 159 REPORTER_ASSERT(reporter, -SK_Scalar1 == perspY.getMaxScale());
160 160
161 SkMatrix baseMats[] = {scale, rot90Scale, rotate, 161 SkMatrix baseMats[] = {scale, rot90Scale, rotate,
162 translate, perspX, perspY}; 162 translate, perspX, perspY};
163 SkMatrix mats[2*SK_ARRAY_COUNT(baseMats)]; 163 SkMatrix mats[2*SK_ARRAY_COUNT(baseMats)];
164 for (size_t i = 0; i < SK_ARRAY_COUNT(baseMats); ++i) { 164 for (size_t i = 0; i < SK_ARRAY_COUNT(baseMats); ++i) {
165 mats[i] = baseMats[i]; 165 mats[i] = baseMats[i];
166 bool invertable = mats[i].invert(&mats[i + SK_ARRAY_COUNT(baseMats)]); 166 bool invertable = mats[i].invert(&mats[i + SK_ARRAY_COUNT(baseMats)]);
167 REPORTER_ASSERT(reporter, invertable); 167 REPORTER_ASSERT(reporter, invertable);
168 } 168 }
169 SkRandom rand; 169 SkRandom rand;
170 for (int m = 0; m < 1000; ++m) { 170 for (int m = 0; m < 1000; ++m) {
171 SkMatrix mat; 171 SkMatrix mat;
172 mat.reset(); 172 mat.reset();
173 for (int i = 0; i < 4; ++i) { 173 for (int i = 0; i < 4; ++i) {
174 int x = rand.nextU() % SK_ARRAY_COUNT(mats); 174 int x = rand.nextU() % SK_ARRAY_COUNT(mats);
175 mat.postConcat(mats[x]); 175 mat.postConcat(mats[x]);
176 } 176 }
177 177
178 SkScalar minStretch = mat.getMinStretch(); 178 SkScalar minScale = mat.getMinScale();
179 SkScalar maxStretch = mat.getMaxStretch(); 179 SkScalar maxScale = mat.getMaxScale();
180 REPORTER_ASSERT(reporter, (minStretch < 0) == (maxStretch < 0)); 180 REPORTER_ASSERT(reporter, (minScale < 0) == (maxScale < 0));
181 REPORTER_ASSERT(reporter, (maxStretch < 0) == mat.hasPerspective()); 181 REPORTER_ASSERT(reporter, (maxScale < 0) == mat.hasPerspective());
182 182
183 if (mat.hasPerspective()) { 183 if (mat.hasPerspective()) {
184 m -= 1; // try another non-persp matrix 184 m -= 1; // try another non-persp matrix
185 continue; 185 continue;
186 } 186 }
187 187
188 // test a bunch of vectors. All should be scaled by between minStretch a nd maxStretch 188 // test a bunch of vectors. All should be scaled by between minScale and maxScale
189 // (modulo some error) and we should find a vector that is scaled by alm ost each. 189 // (modulo some error) and we should find a vector that is scaled by alm ost each.
190 static const SkScalar gVectorStretchTol = (105 * SK_Scalar1) / 100; 190 static const SkScalar gVectorScaleTol = (105 * SK_Scalar1) / 100;
191 static const SkScalar gClosestStretchTol = (97 * SK_Scalar1) / 100; 191 static const SkScalar gCloseScaleTol = (97 * SK_Scalar1) / 100;
192 SkScalar max = 0, min = SK_ScalarMax; 192 SkScalar max = 0, min = SK_ScalarMax;
193 SkVector vectors[1000]; 193 SkVector vectors[1000];
194 for (size_t i = 0; i < SK_ARRAY_COUNT(vectors); ++i) { 194 for (size_t i = 0; i < SK_ARRAY_COUNT(vectors); ++i) {
195 vectors[i].fX = rand.nextSScalar1(); 195 vectors[i].fX = rand.nextSScalar1();
196 vectors[i].fY = rand.nextSScalar1(); 196 vectors[i].fY = rand.nextSScalar1();
197 if (!vectors[i].normalize()) { 197 if (!vectors[i].normalize()) {
198 i -= 1; 198 i -= 1;
199 continue; 199 continue;
200 } 200 }
201 } 201 }
202 mat.mapVectors(vectors, SK_ARRAY_COUNT(vectors)); 202 mat.mapVectors(vectors, SK_ARRAY_COUNT(vectors));
203 for (size_t i = 0; i < SK_ARRAY_COUNT(vectors); ++i) { 203 for (size_t i = 0; i < SK_ARRAY_COUNT(vectors); ++i) {
204 SkScalar d = vectors[i].length(); 204 SkScalar d = vectors[i].length();
205 REPORTER_ASSERT(reporter, SkScalarDiv(d, maxStretch) < gVectorStretc hTol); 205 REPORTER_ASSERT(reporter, SkScalarDiv(d, maxScale) < gVectorScaleTol );
206 REPORTER_ASSERT(reporter, SkScalarDiv(minStretch, d) < gVectorStretc hTol); 206 REPORTER_ASSERT(reporter, SkScalarDiv(minScale, d) < gVectorScaleTol );
207 if (max < d) { 207 if (max < d) {
208 max = d; 208 max = d;
209 } 209 }
210 if (min > d) { 210 if (min > d) {
211 min = d; 211 min = d;
212 } 212 }
213 } 213 }
214 REPORTER_ASSERT(reporter, SkScalarDiv(max, maxStretch) >= gClosestStretc hTol); 214 REPORTER_ASSERT(reporter, SkScalarDiv(max, maxScale) >= gCloseScaleTol);
215 REPORTER_ASSERT(reporter, SkScalarDiv(minStretch, min) >= gClosestStretc hTol); 215 REPORTER_ASSERT(reporter, SkScalarDiv(minScale, min) >= gCloseScaleTol);
216 } 216 }
217 } 217 }
218 218
219 static void test_matrix_is_similarity(skiatest::Reporter* reporter) { 219 static void test_matrix_is_similarity(skiatest::Reporter* reporter) {
220 SkMatrix mat; 220 SkMatrix mat;
221 221
222 // identity 222 // identity
223 mat.setIdentity(); 223 mat.setIdentity();
224 REPORTER_ASSERT(reporter, mat.isSimilarity()); 224 REPORTER_ASSERT(reporter, mat.isSimilarity());
225 225
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 SkScalar zero = 0; 772 SkScalar zero = 0;
773 mat.set(SkMatrix::kMSkewX, -zero); 773 mat.set(SkMatrix::kMSkewX, -zero);
774 REPORTER_ASSERT(reporter, are_equal(reporter, mat, mat2)); 774 REPORTER_ASSERT(reporter, are_equal(reporter, mat, mat2));
775 775
776 mat2.reset(); 776 mat2.reset();
777 mat.reset(); 777 mat.reset();
778 mat.set(SkMatrix::kMSkewX, SK_ScalarNaN); 778 mat.set(SkMatrix::kMSkewX, SK_ScalarNaN);
779 mat2.set(SkMatrix::kMSkewX, SK_ScalarNaN); 779 mat2.set(SkMatrix::kMSkewX, SK_ScalarNaN);
780 REPORTER_ASSERT(reporter, !are_equal(reporter, mat, mat2)); 780 REPORTER_ASSERT(reporter, !are_equal(reporter, mat, mat2));
781 781
782 test_matrix_min_max_stretch(reporter); 782 test_matrix_min_max_scale(reporter);
783 test_matrix_is_similarity(reporter); 783 test_matrix_is_similarity(reporter);
784 test_matrix_recttorect(reporter); 784 test_matrix_recttorect(reporter);
785 test_matrix_decomposition(reporter); 785 test_matrix_decomposition(reporter);
786 test_matrix_homogeneous(reporter); 786 test_matrix_homogeneous(reporter);
787 } 787 }
788 788
789 DEF_TEST(Matrix_Concat, r) { 789 DEF_TEST(Matrix_Concat, r) {
790 SkMatrix a; 790 SkMatrix a;
791 a.setTranslate(10, 20); 791 a.setTranslate(10, 20);
792 792
793 SkMatrix b; 793 SkMatrix b;
794 b.setScale(3, 5); 794 b.setScale(3, 5);
795 795
796 SkMatrix expected; 796 SkMatrix expected;
797 expected.setConcat(a,b); 797 expected.setConcat(a,b);
798 798
799 REPORTER_ASSERT(r, expected == SkMatrix::Concat(a, b)); 799 REPORTER_ASSERT(r, expected == SkMatrix::Concat(a, b));
800 } 800 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGpuGL.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698