summaryrefslogtreecommitdiffstats
path: root/lib/test-geometry.html
blob: 42c142e6144755baa2994f731c21d208a70abbb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!DOCTYPE html>
<html>
    <head>
        <title>Test geometry functions</title>
        </script>
    </head>
    <body>
        <div id="status">Running...</div>
        <script src="geometry.js"></script>
        <script>
var asserts = 0;

function assertEqual(a, b) {
    var ok = true;
    if (typeof a == 'number' && typeof b == 'number') {
        if (isNaN(a) != isNaN(b)) {
            ok = false;
        } else if (Math.abs(a - b) > 1e-10) {
            ok = false;
        }
    } else {
        ok = (a === b);
    }
    if (!ok) {
        var msg = "Assertion failure: '"
            + a + "' !== '"
            + b + "'";
        setStatus(msg);
        throw new Error(msg);
    }
    asserts++;
}

function setStatus(status) {
    document.getElementById('status').innerHTML = status;
}

function checkEndpoints(line) {
    if (line.y1 !== line.y2) {
        assertEqual(line.y(line.x1), line.y1);
        assertEqual(line.y(line.x2), line.y2);
    }
    if (line.x1 !== line.x2) {
        assertEqual(line.x(line.y1), line.x1);
        assertEqual(line.x(line.y2), line.x2);
    }
}

var line1 = new geo.LineSegment(1, 1, 2, 3),
    line2 = new geo.LineSegment(1, 2, 5, 0),
    line3 = new geo.LineSegment(2, 3, 5, 9),
    line4 = new geo.LineSegment(1.5, 2, 1.5, 3);
    line5 = new geo.LineSegment(2, 1, 5, 1);

checkEndpoints(line1);
checkEndpoints(line2);

var i12 = line1.intersect(line2),
    i21 = line2.intersect(line1),
    i13 = line1.intersect(line3),
    i23 = line2.intersect(line3),
    i32 = line3.intersect(line2),
    i14 = line1.intersect(line4),
    i15 = line1.intersect(line5),
    i45 = line4.intersect(line5);

assertEqual(i12.x, 1.4);
assertEqual(i12.y, 1.8);
assertEqual(i12.in1, true);
assertEqual(i12.in2, true);

assertEqual(i21.x, 1.4);
assertEqual(i21.y, 1.8);
assertEqual(i21.in1, true);
assertEqual(i21.in2, true);

assertEqual(i13.x, NaN);
assertEqual(i13.y, NaN);

assertEqual(i23.x, 1.4);
assertEqual(i23.y, 1.8);
assertEqual(i23.in1, true);
assertEqual(i23.in2, false);

assertEqual(i32.x, 1.4);
assertEqual(i32.y, 1.8);
assertEqual(i32.in1, false);
assertEqual(i32.in2, true);

assertEqual(i14.x, 1.5);
assertEqual(i14.y, 2);
assertEqual(i14.in1, true);
assertEqual(i14.in2, true);

assertEqual(i15.x, 1);
assertEqual(i15.y, 1);
assertEqual(i15.in1, true);
assertEqual(i15.in2, false);

assertEqual(i45.x, 1.5);
assertEqual(i45.y, 1);
assertEqual(i45.in1, false);
assertEqual(i45.in2, false);

setStatus(asserts + ' tests OK');
        </script>
    </body>
</html>