annotate doodle/tk/test/test1.d @ 100:a274d16ab6ce

struct initialisers
author David Bryant <bagnose@gmail.com>
date Mon, 18 Oct 2010 18:10:02 +1030
parents 1b4c9ba58673
children 89e8b0d92f36
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
1 private {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
2 import doodle.tk.geometry;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
3 import std.stdio;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
4 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
5
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
6 void test1() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
7 writefln("*** Test1 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
8
100
a274d16ab6ce struct initialisers
David Bryant <bagnose@gmail.com>
parents: 48
diff changeset
9 Point p1;
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
10 Point p2 = p1; // copy construction
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
11 assert(p1 == p2); // equality
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
12 assert(!(p1 != p2)); // inequality
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
13 p2 = p1; // assignment
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
14 assert(p1 == p2);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
15
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
16 Point p3 = Point(3.0, 5.0); // standard constructor
100
a274d16ab6ce struct initialisers
David Bryant <bagnose@gmail.com>
parents: 48
diff changeset
17 assert(p3 - p3 == Vector()); // subtraction (point minus point)
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
18
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
19 Vector v3 = Vector(3.0, 5.0);
100
a274d16ab6ce struct initialisers
David Bryant <bagnose@gmail.com>
parents: 48
diff changeset
20 assert(p3 - v3 == Point()); // subtraction (point minus vector)
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
21
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
22 Point p4 = Point(1.0, 10.0);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
23 Point p5 = Point(10.0, 1.0);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 33
diff changeset
24 assert(minExtents(p4, p5) == Point(1.0, 1.0)); // min extents
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 33
diff changeset
25 assert(maxExtents(p4, p5) == Point(10.0, 10.0)); // max extents
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
26
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
27 writefln("p1: %s", p1); // toString
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
28 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
30 void test2() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
31 writefln("*** Test2 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
32
100
a274d16ab6ce struct initialisers
David Bryant <bagnose@gmail.com>
parents: 48
diff changeset
33 Vector v1;
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
34 Vector v2 = v1; // copy construction
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
35 assert(v1 == v2); // equality
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
36 assert(!(v1 != v2)); // inequality
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
37 v2 = v1; // assignment
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
38
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
39 Vector v3 = Vector(3.0, 4.0); // standard construction
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
40 assert(v3 + v3 == Vector(6.0, 8.0)); // addition
100
a274d16ab6ce struct initialisers
David Bryant <bagnose@gmail.com>
parents: 48
diff changeset
41 assert(v3 - v3 == Vector()); // subtraction
33
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
42 assert(-v3 == Vector(-3.0, -4.0)); // negation
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 assert(v3.length == 5.0); // length
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
44 assert(2.0 * v3 == Vector(6.0, 8.0)); // scalar multiplication
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
45 assert(v3 / 2.0 == Vector(1.5, 2.0)); // scalar division
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
46
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
47 writefln("v1: %s", v1); // toString
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
48 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
49
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50 void test3() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51 writefln("*** Test3 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53 // Horizontal axis
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54 Line l1 = Line(Point(0.0, 0.0), Vector(1.0, 0.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 // Vertical axis
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 Line l2 = Line(Point(0.0, 0.0), Vector(0.0, 1.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 Point p;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59 bool b = intersection(l1, l2, p);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 assert(b);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61 assert(p == Point(0.0, 0.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 void test4() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 writefln("*** Test4 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67 Line l1 = Line(Point(-1.0, -1.0), Vector( 1.0, 1.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 Line l2 = Line(Point( 1.0, -1.0), Vector(-1.0, 1.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
69
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 Point p;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71 bool b = intersection(l1, l2, p);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72 assert(b);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
73 assert(p == Point(0.0, 0.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 void test5() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77 writefln("*** Test5 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 // Here the segments intersect
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
80
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
81 Segment s1 = Segment(Point(2.0, 2.0), Point(4.0, 4.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 Segment s2 = Segment(Point(2.0, 4.0), Point(4.0, 2.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84 Point p;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 bool b = intersection(s1, s2, p);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 assert(b);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87 writefln("p: %s", p);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 assert(p == Point(3.0, 3.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91 void test6() {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92 writefln("*** Test6 ***");
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 // Here the lines of the segments intersect but the segments don't
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 Segment s1 = Segment(Point(2.0, 2.0), Point(4.0, 4.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
97 Segment s2 = Segment(Point(4.0, 2.0), Point(6.0, 0.0));
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
98
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
99 Point p;
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
100 bool b = intersection(s1, s2, p);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
101 assert(!b);
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
102 }
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
103
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
104 void main(string[] args) {
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
105 test1();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
106 test2();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
107 test3();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
108 test4();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
109 test5();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
110 test6();
157b4ad5615d Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
diff changeset
111 }