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

Side by Side Diff: tests/Sk64Test.cpp

Issue 116543009: Revert "begin to remove SkLONGLONG and wean Skia off of Sk64" (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years 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 | « tests/MathTest.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 "Test.h" 8 #include "Test.h"
9 #include "TestClassDef.h" 9 #include "TestClassDef.h"
10 #include "SkRandom.h" 10 #include "SkRandom.h"
11 #include <math.h> 11 #include <math.h>
12 12
13 struct BoolTable { 13 struct BoolTable {
14 int8_t zero, pos, neg, toBool, sign; 14 int8_t zero, pos, neg, toBool, sign;
15 }; 15 };
16 16
17 static void bool_table_test(skiatest::Reporter* reporter, 17 static void bool_table_test(skiatest::Reporter* reporter,
18 const Sk64& a, const BoolTable& table) 18 const Sk64& a, const BoolTable& table)
19 { 19 {
20 REPORTER_ASSERT(reporter, a.isZero() != a.nonZero()); 20 REPORTER_ASSERT(reporter, a.isZero() != a.nonZero());
21 21
22 REPORTER_ASSERT(reporter, !a.isZero() == !table.zero); 22 REPORTER_ASSERT(reporter, !a.isZero() == !table.zero);
23 REPORTER_ASSERT(reporter, !a.isPos() == !table.pos); 23 REPORTER_ASSERT(reporter, !a.isPos() == !table.pos);
24 REPORTER_ASSERT(reporter, !a.isNeg() == !table.neg); 24 REPORTER_ASSERT(reporter, !a.isNeg() == !table.neg);
25 REPORTER_ASSERT(reporter, a.getSign() == table.sign); 25 REPORTER_ASSERT(reporter, a.getSign() == table.sign);
26 } 26 }
27 27
28 void Sk64::UnitTestWithReporter(void* reporterParam) { 28 #ifdef SkLONGLONG
29 skiatest::Reporter* reporter = (skiatest::Reporter*)reporterParam; 29 static SkLONGLONG asLL(const Sk64& a)
30 {
31 return ((SkLONGLONG)a.fHi << 32) | a.fLo;
32 }
33 #endif
30 34
35 DEF_TEST(Sk64Test, reporter) {
31 enum BoolTests { 36 enum BoolTests {
32 kZero_BoolTest, 37 kZero_BoolTest,
33 kPos_BoolTest, 38 kPos_BoolTest,
34 kNeg_BoolTest 39 kNeg_BoolTest
35 }; 40 };
36 static const BoolTable gBoolTable[] = { 41 static const BoolTable gBoolTable[] = {
37 { 1, 0, 0, 0, 0 }, 42 { 1, 0, 0, 0, 0 },
38 { 0, 1, 0, 1, 1 }, 43 { 0, 1, 0, 1, 1 },
39 { 0, 0, 1, 1, -1 } 44 { 0, 0, 1, 1, -1 }
40 }; 45 };
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 c = a; c.add(bb); 89 c = a; c.add(bb);
85 REPORTER_ASSERT(reporter, c.get32() == aa + bb); 90 REPORTER_ASSERT(reporter, c.get32() == aa + bb);
86 c = a; c.add(-bb); 91 c = a; c.add(-bb);
87 REPORTER_ASSERT(reporter, c.get32() == aa - bb); 92 REPORTER_ASSERT(reporter, c.get32() == aa - bb);
88 c = a; c.add(b); 93 c = a; c.add(b);
89 REPORTER_ASSERT(reporter, c.get32() == aa + bb); 94 REPORTER_ASSERT(reporter, c.get32() == aa + bb);
90 c = a; c.sub(b); 95 c = a; c.sub(b);
91 REPORTER_ASSERT(reporter, c.get32() == aa - bb); 96 REPORTER_ASSERT(reporter, c.get32() == aa - bb);
92 } 97 }
93 98
94 for (i = 0; i < 1000; i++) { 99 #ifdef SkLONGLONG
100 for (i = 0; i < 1000; i++)
101 {
95 rand.next64(&a); //a.fHi >>= 1; // avoid overflow 102 rand.next64(&a); //a.fHi >>= 1; // avoid overflow
96 rand.next64(&b); //b.fHi >>= 1; // avoid overflow 103 rand.next64(&b); //b.fHi >>= 1; // avoid overflow
97 104
98 if (!(i & 3)) // want to explicitly test these cases 105 if (!(i & 3)) // want to explicitly test these cases
99 { 106 {
100 a.fLo = 0; 107 a.fLo = 0;
101 b.fLo = 0; 108 b.fLo = 0;
102 } 109 }
103 else if (!(i & 7)) // want to explicitly test these cases 110 else if (!(i & 7)) // want to explicitly test these cases
104 { 111 {
105 a.fHi = 0; 112 a.fHi = 0;
106 b.fHi = 0; 113 b.fHi = 0;
107 } 114 }
108 115
109 int64_t aa = a.as64(); 116 SkLONGLONG aa = asLL(a);
110 int64_t bb = b.as64(); 117 SkLONGLONG bb = asLL(b);
111 118
112 REPORTER_ASSERT(reporter, (a < b) == (aa < bb)); 119 REPORTER_ASSERT(reporter, (a < b) == (aa < bb));
113 REPORTER_ASSERT(reporter, (a <= b) == (aa <= bb)); 120 REPORTER_ASSERT(reporter, (a <= b) == (aa <= bb));
114 REPORTER_ASSERT(reporter, (a > b) == (aa > bb)); 121 REPORTER_ASSERT(reporter, (a > b) == (aa > bb));
115 REPORTER_ASSERT(reporter, (a >= b) == (aa >= bb)); 122 REPORTER_ASSERT(reporter, (a >= b) == (aa >= bb));
116 REPORTER_ASSERT(reporter, (a == b) == (aa == bb)); 123 REPORTER_ASSERT(reporter, (a == b) == (aa == bb));
117 REPORTER_ASSERT(reporter, (a != b) == (aa != bb)); 124 REPORTER_ASSERT(reporter, (a != b) == (aa != bb));
118 125
119 c = a; c.add(b); 126 c = a; c.add(b);
120 REPORTER_ASSERT(reporter, c.as64() == aa + bb); 127 REPORTER_ASSERT(reporter, asLL(c) == aa + bb);
121 c = a; c.sub(b); 128 c = a; c.sub(b);
122 REPORTER_ASSERT(reporter, c.as64() == aa - bb); 129 REPORTER_ASSERT(reporter, asLL(c) == aa - bb);
123 c = a; c.rsub(b); 130 c = a; c.rsub(b);
124 REPORTER_ASSERT(reporter, c.as64() == bb - aa); 131 REPORTER_ASSERT(reporter, asLL(c) == bb - aa);
125 c = a; c.negate(); 132 c = a; c.negate();
126 REPORTER_ASSERT(reporter, c.as64() == -aa); 133 REPORTER_ASSERT(reporter, asLL(c) == -aa);
127 134
128 int bits = rand.nextU() & 63; 135 int bits = rand.nextU() & 63;
129 c = a; c.shiftLeft(bits); 136 c = a; c.shiftLeft(bits);
130 REPORTER_ASSERT(reporter, c.as64() == (aa << bits)); 137 REPORTER_ASSERT(reporter, asLL(c) == (aa << bits));
131 c = a; c.shiftRight(bits); 138 c = a; c.shiftRight(bits);
132 REPORTER_ASSERT(reporter, c.as64() == (aa >> bits)); 139 REPORTER_ASSERT(reporter, asLL(c) == (aa >> bits));
133 c = a; c.roundRight(bits); 140 c = a; c.roundRight(bits);
134 141
135 int64_t tmp; 142 SkLONGLONG tmp;
136 143
137 tmp = aa; 144 tmp = aa;
138 if (bits > 0) 145 if (bits > 0)
139 tmp += (int64_t)1 << (bits - 1); 146 tmp += (SkLONGLONG)1 << (bits - 1);
140 REPORTER_ASSERT(reporter, c.as64() == (tmp >> bits)); 147 REPORTER_ASSERT(reporter, asLL(c) == (tmp >> bits));
141 148
142 c.setMul(a.fHi, b.fHi); 149 c.setMul(a.fHi, b.fHi);
143 tmp = (int64_t)a.fHi * b.fHi; 150 tmp = (SkLONGLONG)a.fHi * b.fHi;
144 REPORTER_ASSERT(reporter, c.as64() == tmp); 151 REPORTER_ASSERT(reporter, asLL(c) == tmp);
145 } 152 }
146 153
147 154
148 for (i = 0; i < 100000; i++) 155 for (i = 0; i < 100000; i++)
149 { 156 {
150 Sk64 wide; 157 Sk64 wide;
151 int32_t denom = rand.nextS(); 158 int32_t denom = rand.nextS();
152 159
153 while (denom == 0) 160 while (denom == 0)
154 denom = rand.nextS(); 161 denom = rand.nextS();
155 wide.setMul(rand.nextS(), rand.nextS()); 162 wide.setMul(rand.nextS(), rand.nextS());
156 int64_t check = wide.getLongLong(); 163 SkLONGLONG check = wide.getLongLong();
157 164
158 wide.div(denom, Sk64::kTrunc_DivOption); 165 wide.div(denom, Sk64::kTrunc_DivOption);
159 check /= denom; 166 check /= denom;
160 int64_t w = wide.getLongLong(); 167 SkLONGLONG w = wide.getLongLong();
161 168
162 REPORTER_ASSERT(reporter, check == w); 169 REPORTER_ASSERT(reporter, check == w);
163 170
164 wide.setMul(rand.nextS(), rand.nextS()); 171 wide.setMul(rand.nextS(), rand.nextS());
165 wide.abs(); 172 wide.abs();
166 denom = wide.getSqrt(); 173 denom = wide.getSqrt();
167 int32_t ck = (int32_t)sqrt((double)wide.getLongLong()); 174 int32_t ck = (int32_t)sqrt((double)wide.getLongLong());
168 int diff = denom - ck; 175 int diff = denom - ck;
169 REPORTER_ASSERT(reporter, SkAbs32(diff) <= 1); 176 REPORTER_ASSERT(reporter, SkAbs32(diff) <= 1);
170 } 177 }
178 #endif
171 } 179 }
172
173 DEF_TEST(Sk64Test, reporter) {
174 Sk64::UnitTestWithReporter(reporter);
175 }
OLDNEW
« no previous file with comments | « tests/MathTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698