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