OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 // Unit tests for src/core/SkPoint.cpp and its header | 8 // Unit tests for src/core/SkPoint.cpp and its header |
9 | 9 |
10 #include "SkPoint.h" | 10 #include "SkPoint.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 SkPoint pt = { SkFloatToScalar(1.0e-37f), SkFloatToScalar(1.0e-37f) }; | 110 SkPoint pt = { SkFloatToScalar(1.0e-37f), SkFloatToScalar(1.0e-37f) }; |
111 SkPoint copy = pt; | 111 SkPoint copy = pt; |
112 | 112 |
113 REPORTER_ASSERT(reporter, 0 == SkPoint::Normalize(&pt)); | 113 REPORTER_ASSERT(reporter, 0 == SkPoint::Normalize(&pt)); |
114 REPORTER_ASSERT(reporter, pt == copy); // pt is unchanged | 114 REPORTER_ASSERT(reporter, pt == copy); // pt is unchanged |
115 | 115 |
116 REPORTER_ASSERT(reporter, !pt.setLength(SK_Scalar1)); | 116 REPORTER_ASSERT(reporter, !pt.setLength(SK_Scalar1)); |
117 REPORTER_ASSERT(reporter, pt == copy); // pt is unchanged | 117 REPORTER_ASSERT(reporter, pt == copy); // pt is unchanged |
118 } | 118 } |
119 | 119 |
120 static void PointTest(skiatest::Reporter* reporter) { | 120 #include "TestClassDef.h" |
| 121 DEF_TEST(Point, reporter) { |
121 test_casts(reporter); | 122 test_casts(reporter); |
122 | 123 |
123 static const struct { | 124 static const struct { |
124 SkScalar fX; | 125 SkScalar fX; |
125 SkScalar fY; | 126 SkScalar fY; |
126 SkScalar fLength; | 127 SkScalar fLength; |
127 } gRec[] = { | 128 } gRec[] = { |
128 { SkIntToScalar(3), SkIntToScalar(4), SkIntToScalar(5) }, | 129 { SkIntToScalar(3), SkIntToScalar(4), SkIntToScalar(5) }, |
129 { SkFloatToScalar(0.6f), SkFloatToScalar(0.8f), SK_Scalar1 }, | 130 { SkFloatToScalar(0.6f), SkFloatToScalar(0.8f), SK_Scalar1 }, |
130 }; | 131 }; |
131 | 132 |
132 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { | 133 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { |
133 test_length(reporter, gRec[i].fX, gRec[i].fY, gRec[i].fLength); | 134 test_length(reporter, gRec[i].fX, gRec[i].fY, gRec[i].fLength); |
134 } | 135 } |
135 | 136 |
136 test_underflow(reporter); | 137 test_underflow(reporter); |
137 test_overflow(reporter); | 138 test_overflow(reporter); |
138 } | 139 } |
139 | 140 |
140 #include "TestClassDef.h" | 141 DEF_TEST(Point_setLengthFast, reporter) { |
141 DEFINE_TESTCLASS("Point", PointTestClass, PointTest) | 142 // Scale a (1,1) point to a bunch of different lengths, |
| 143 // making sure the slow and fast paths are within 0.1%. |
| 144 const float tests[] = { 1.0f, 0.0f, 1.0e-37f, 3.4e38f, 42.0f, 0.00012f }; |
| 145 |
| 146 const SkPoint kOne = {1.0f, 1.0f}; |
| 147 for (unsigned i = 0; i < SK_ARRAY_COUNT(tests); i++) { |
| 148 SkPoint slow = kOne, fast = kOne; |
| 149 |
| 150 slow.setLength(tests[i]); |
| 151 fast.setLengthFast(tests[i]); |
| 152 |
| 153 if (slow.length() < FLT_MIN && fast.length() < FLT_MIN) continue; |
| 154 |
| 155 SkScalar ratio = slow.length() / fast.length(); |
| 156 REPORTER_ASSERT(reporter, ratio > 0.999f); |
| 157 REPORTER_ASSERT(reporter, ratio < 1.001f); |
| 158 } |
| 159 } |
OLD | NEW |