EdgeWalkerQuadratic4x4_Test.cpp revision d6176b0dcacb124539e0cfd051e6d93a9782f020
1fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "EdgeWalker_Test.h" 2fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "Intersection_Tests.h" 3fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "SkBitmap.h" 4fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "SkCanvas.h" 5fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include <assert.h> 6fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 7fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 8fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comstatic void* testSimplify4x4QuadraticsMain(void* data) 9fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com{ 10fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com SkASSERT(data); 11fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com State4& state = *(State4*) data; 1259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char pathStr[1024]; 1359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com bzero(pathStr, sizeof(pathStr)); 1459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com do { 1559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ax = state.a & 0x03; 1659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ay = state.a >> 2; 1759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int bx = state.b & 0x03; 1859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int by = state.b >> 2; 1959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cx = state.c & 0x03; 2059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cy = state.c >> 2; 2159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dx = state.d & 0x03; 2259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dy = state.d >> 2; 2359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int e = 0 ; e < 16; ++e) { 2459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ex = e & 0x03; 2559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ey = e >> 2; 2659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int f = e ; f < 16; ++f) { 2759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fx = f & 0x03; 2859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fy = f >> 2; 2959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int g = f ; g < 16; ++g) { 3059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int gx = g & 0x03; 3159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int gy = g >> 2; 3259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int h = g ; h < 16; ++h) { 3359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int hx = h & 0x03; 3459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int hy = h >> 2; 3559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkPath path, out; 3659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kWinding_FillType); 3759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ax, ay); 3859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.quadTo(bx, by, cx, cy); 3959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(dx, dy); 4059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 4159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ex, ey); 4259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(fx, fy); 4359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.quadTo(gx, gy, hx, hy); 4459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 4559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (1) { // gdb: set print elements 400 4659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char* str = pathStr; 4759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); 4859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", bx, by, cx, cy); 4959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", dx, dy); 5059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 5159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ex, ey); 5259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); 5359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", gx, gy, hx, hy); 5459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 5559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 5624bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com outputProgress(state, pathStr, SkPath::kWinding_FillType); 5724bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com testSimplifyx(path, false, out, state, pathStr); 5859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 5959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kEvenOdd_FillType); 6059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); 6159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testSimplifyx(path, true, out, state, pathStr); 6259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 63fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 64fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 65fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 66fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 6759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } while (runNextTestSet(state)); 68fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com return NULL; 69fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 70fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 7124bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.comvoid Simplify4x4QuadraticsThreaded_Test(int& testsRun) 72fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com{ 7359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkDebugf("%s\n", __FUNCTION__); 7459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#ifdef SK_DEBUG 7559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindSum = 4; // FIXME: 3? 7659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindValue = 4; 7759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#endif 7859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com const char testStr[] = "testQuadratic"; 7959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com initializeTests(testStr, sizeof(testStr)); 8024bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com int testsStart = testsRun; 81fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com for (int a = 0; a < 16; ++a) { 82fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com for (int b = a ; b < 16; ++b) { 83fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com for (int c = b ; c < 16; ++c) { 84d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com for (int d = c; d < 16; ++d) { 8559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += dispatchTest4(testSimplify4x4QuadraticsMain, 8659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com a, b, c, d); 87fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 8859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("."); 89fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 9059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("%d", b); 91fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 9259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("\n%d", a); 93fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 9459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += waitForCompletion(); 9524bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com SkDebugf("%s tests=%d total=%d\n", __FUNCTION__, testsRun - testsStart, testsRun); 96fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 97