Skip to content

Commit 5063c1e

Browse files
committed
Add tests and package
1 parent dd328d7 commit 5063c1e

File tree

5 files changed

+215
-0
lines changed

5 files changed

+215
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
.DS_Store
2+
.nyc_output/
3+
coverage/
4+
node_modules/

package.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"name": "ct-quadtree",
3+
"version": "0.0.1",
4+
"description": "Library for creating and searching Quad Trees",
5+
"main": "quadtree.js",
6+
"directories": {
7+
"example": "example"
8+
},
9+
"scripts": {
10+
"test": "nyc --reporter=html mocha",
11+
"test-watch": "mocha --watch"
12+
},
13+
"repository": {
14+
"type": "git",
15+
"url": "git+https://github.com/CodingTrain/QuadTree.git"
16+
},
17+
"keywords": [
18+
"quadtree",
19+
"quad",
20+
"tree",
21+
"coding",
22+
"train"
23+
],
24+
"author": "Dan Shiffman",
25+
"license": "MIT",
26+
"bugs": {
27+
"url": "https://github.com/CodingTrain/QuadTree/issues"
28+
},
29+
"homepage": "https://github.com/CodingTrain/QuadTree#readme",
30+
"devDependencies": {
31+
"chai": "^4.1.2",
32+
"mocha": "^5.0.5",
33+
"nyc": "^11.6.0"
34+
},
35+
"dependencies": {}
36+
}

test/point.spec.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const {expect} = require('chai');
2+
let { Point } = require('../quadtree');
3+
4+
describe('Point', () => {
5+
it('assigns x on creation', () => {
6+
let point = new Point(12, 23);
7+
expect(point.x).to.equal(12);
8+
});
9+
it('assigns y on creation', () => {
10+
let point = new Point(12, 23);
11+
expect(point.y).to.equal(23);
12+
});
13+
});

test/quadtree.spec.js

Whitespace-only changes.

test/rectangle.spec.js

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
const {expect} = require('chai');
2+
let { Rectangle, Point } = require('../quadtree');
3+
4+
describe('Rectangle', () => {
5+
describe('on construction', () => {
6+
it('sets x', () => {
7+
let rect = new Rectangle(12, 23, 40, 83);
8+
expect(rect.x).to.equal(12);
9+
});
10+
it('sets y', () => {
11+
let rect = new Rectangle(12, 23, 40, 83);
12+
expect(rect.y).to.equal(23);
13+
});
14+
it('sets w', () => {
15+
let rect = new Rectangle(12, 23, 40, 83);
16+
expect(rect.w).to.equal(40);
17+
});
18+
it('sets h', () => {
19+
let rect = new Rectangle(12, 23, 40, 83);
20+
expect(rect.h).to.equal(83);
21+
});
22+
});
23+
describe('contains', () => {
24+
let rect;
25+
let left;
26+
let right;
27+
let top;
28+
let bottom;
29+
let cx;
30+
let cy;
31+
beforeEach(() => {
32+
// Left: 25, Right: 75
33+
// Top: 70, Bottom: 130
34+
cx = 50;
35+
cy = 100;
36+
let w = 25;
37+
let h = 30;
38+
rect = new Rectangle(cx, cy, w, h);;
39+
left = cx - w;
40+
right = cx + w;
41+
top = cy - h;
42+
bottom = cy + h;
43+
});
44+
it('returns true when point is in the center', () => {
45+
let point = new Point(cx, cy);
46+
expect(rect.contains(point)).to.be.true;
47+
});
48+
it('returns true when point on left edge', () => {
49+
let point = new Point(left, cy);
50+
expect(rect.contains(point)).to.be.true;
51+
});
52+
it('returns true when point inside left edge', () => {
53+
let point = new Point(left + 1, cy);
54+
expect(rect.contains(point)).to.be.true;
55+
});
56+
it('returns false when point outside left edge', () => {
57+
let point = new Point(left - 1, cy);
58+
expect(rect.contains(point)).not.to.be.true;
59+
});
60+
it('returns true when point on right edge', () => {
61+
let point = new Point(right, cy);
62+
expect(rect.contains(point)).to.be.true;
63+
});
64+
it('returns true when point inside right edge', () => {
65+
let point = new Point(right - 1, cy);
66+
expect(rect.contains(point)).to.be.true;
67+
});
68+
it('returns false when point outside right edge', () => {
69+
let point = new Point(right + 1, cy);
70+
expect(rect.contains(point)).not.to.be.true;
71+
});
72+
it('returns true when point on top edge', () => {
73+
let point = new Point(cx, top);
74+
expect(rect.contains(point)).to.be.true;
75+
});
76+
it('returns true when point inside top edge', () => {
77+
let point = new Point(cx, top + 1);
78+
expect(rect.contains(point)).to.be.true;
79+
});
80+
it('returns false when point outside top edge', () => {
81+
let point = new Point(cx, top - 1);
82+
expect(rect.contains(point)).not.to.be.true;
83+
});
84+
it('returns true when point on bottom edge', () => {
85+
let point = new Point(cx, bottom);
86+
expect(rect.contains(point)).to.be.true;
87+
});
88+
it('returns true when point inside bottom edge', () => {
89+
let point = new Point(cx, bottom - 1);
90+
expect(rect.contains(point)).to.be.true;
91+
});
92+
it('returns false when point outside bottom edge', () => {
93+
let point = new Point(cx, bottom + 1);
94+
expect(rect.contains(point)).not.to.be.true;
95+
});
96+
});
97+
describe('intersects', () => {
98+
let base;
99+
let cx;
100+
let cy;
101+
let w;
102+
let h;
103+
let left;
104+
let right;
105+
let top;
106+
let bottom;
107+
beforeEach(() => {
108+
cx = 100;
109+
cy = 200;
110+
w = 50;
111+
h = 25;
112+
left = cx - w;
113+
right = cx + w;
114+
top = cy - h;
115+
bottom = cy + h;
116+
base = new Rectangle(cx, cy, w, h);
117+
});
118+
it('returns true when second rectangle is inside first', () => {
119+
let test = new Rectangle(cx, cy, w / 2, h / 2);
120+
expect(base.intersects(test)).to.be.true;
121+
});
122+
it('returns true when second rectangle is the same as first', () => {
123+
let test = new Rectangle(cx, cy, w, h);
124+
expect(base.intersects(test)).to.be.true;
125+
});
126+
it('returns true when second rectangle is the same encapsulates the first', () => {
127+
let test = new Rectangle(cx, cy, w * 2, h * 2);
128+
expect(base.intersects(test)).to.be.true;
129+
});
130+
it('returns true when edges line up on the left', () => {
131+
let test = new Rectangle(left - 10, cy, 10, 10);
132+
expect(base.intersects(test)).to.be.true;
133+
});
134+
it('returns false when edges do not line up on the left', () => {
135+
let test = new Rectangle(left - 10 - 1, cy, 10, 10);
136+
expect(base.intersects(test)).not.to.be.true;
137+
});
138+
it('returns true when edges line up on the right', () => {
139+
let test = new Rectangle(right + 10, cy, 10, 10);
140+
expect(base.intersects(test)).to.be.true;
141+
});
142+
it('returns false when edges do not line up on the right', () => {
143+
let test = new Rectangle(right + 10 + 1, cy, 10, 10);
144+
expect(base.intersects(test)).not.to.be.true;
145+
});
146+
it('returns true when edges line up on the top', () => {
147+
let test = new Rectangle(cx, top - 10, 10, 10);
148+
expect(base.intersects(test)).to.be.true;
149+
});
150+
it('returns false when edges do not line up on the top', () => {
151+
let test = new Rectangle(cx, top - 10 - 1, 10, 10);
152+
expect(base.intersects(test)).not.to.be.true;
153+
});
154+
it('returns true when edges line up on the bottom', () => {
155+
let test = new Rectangle(cx, bottom + 10, 10, 10);
156+
expect(base.intersects(test)).to.be.true;
157+
});
158+
it('returns false when edges do not line up on the bottom', () => {
159+
let test = new Rectangle(cx, bottom + 10 + 1, 10, 10);
160+
expect(base.intersects(test)).not.to.be.true;
161+
});
162+
});
163+
});

0 commit comments

Comments
 (0)