19e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com/*
29e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Copyright 2012 Google Inc.
39e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com *
49e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be
59e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * found in the LICENSE file.
69e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com */
7c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com#include "CurveIntersection.h"
827accef223a27fba437f5e825d99edbae20a045bcaryclark@google.com#include "Intersection_Tests.h"
9639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com#include "IntersectionUtilities.h"
10639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com
11639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.comstatic void assert_that(int x, int y, const char* s) {
12639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    if (x == y) {
13639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com        return;
14639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    }
15aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com    SkDebugf("result=%d expected=%d %s\n", x, y, s);
16639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com}
17639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com
18639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.comstatic void side_test() {
19639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(side(-1), 0, "side(-1) != 0");
20639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(side(0), 1, "side(0) != 1");
21639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(side(1), 2, "side(1) != 2");
22639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com}
23639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com
24639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.comstatic void sideBit_test() {
25639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(sideBit(-1), 1, "sideBit(-1) != 1");
26639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(sideBit(0), 2, "sideBit(0) != 2");
27639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    assert_that(sideBit(1), 4, "sideBit(1) != 4");
28639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com}
29639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com
30639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.comstatic void other_two_test() {
31639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    for (int x = 0; x < 4; ++x) {
32639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com        for (int y = 0; y < 4; ++y) {
33639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            if (x == y) {
34639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com                continue;
35639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            }
36639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            int mask = other_two(x, y);
37639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            int all = 1 << x;
38639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            all |= 1 << y;
39639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            all |= 1 << (x ^ mask);
40639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            all |= 1 << (y ^ mask);
41639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            if (all == 0x0F) {
42639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com                continue;
43639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com            }
44aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com            SkDebugf("[%d,%d] other_two failed mask=%d [%d,%d]\n",
45639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com                x, y, mask, x ^ mask, y ^ mask);
46639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com        }
47639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    }
48639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com}
49639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com
50639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.comvoid Inline_Tests() {
51639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    side_test();
52639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    sideBit_test();
53639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com    other_two_test();
54639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com}
55