describe 'LineSegment', -> LineSegment = require 'lib/world/line_segment' Vector = require 'lib/world/vector' v00 = new Vector(0, 0) v11 = new Vector(1, 1) v22 = new Vector(2, 2) v34 = new Vector(3, 4) v04 = new Vector(0, 4) v30 = new Vector(3, 0) vneg = new Vector(-1, -1) it 'intersects itself', -> lineSegment = new LineSegment v00, v34 expect(lineSegment.intersectsLineSegment lineSegment).toBe true it 'intersects other segments properly', -> l1 = new LineSegment v00, v34 l2 = new LineSegment v04, v30 l3 = new LineSegment v00, v11 expect(l1.intersectsLineSegment l2).toBe true expect(l2.intersectsLineSegment l1).toBe true expect(l1.intersectsLineSegment l3).toBe true expect(l3.intersectsLineSegment l1).toBe true expect(l2.intersectsLineSegment l3).toBe false expect(l3.intersectsLineSegment l2).toBe false it 'can tell when a point is on a line or segment', -> lineSegment = new LineSegment v00, v11 expect(lineSegment.pointOnLine v22, false).toBe true expect(lineSegment.pointOnLine v22, true).toBe false expect(lineSegment.pointOnLine v00, false).toBe true expect(lineSegment.pointOnLine v00, true).toBe true expect(lineSegment.pointOnLine v11, true).toBe true expect(lineSegment.pointOnLine v11, false).toBe true expect(lineSegment.pointOnLine v34, false).toBe false expect(lineSegment.pointOnLine v34, true).toBe false it 'correctly calculates distance to points', -> lineSegment = new LineSegment v00, v11 expect(lineSegment.distanceToPoint v00).toBe 0 expect(lineSegment.distanceToPoint v11).toBe 0 expect(lineSegment.distanceToPoint v22).toBeCloseTo Math.SQRT2 expect(lineSegment.distanceToPoint v34).toBeCloseTo Math.sqrt(2 * 2 + 3 * 3) expect(lineSegment.distanceToPoint v04).toBeCloseTo Math.sqrt(1 * 1 + 3 * 3) expect(lineSegment.distanceToPoint v30).toBeCloseTo Math.sqrt(2 * 2 + 1 * 1) expect(lineSegment.distanceToPoint vneg).toBeCloseTo Math.SQRT2 nullSegment = new LineSegment v11, v11 expect(lineSegment.distanceToPoint v11).toBe 0 expect(lineSegment.distanceToPoint v22).toBeCloseTo Math.SQRT2