/// Constructors
// new Point()
(x=0, y=0)

// new Point(1)
(x=1, y=undefined)

// new Point(1, 2)
(x=1, y=2)

// new Point({}, 2)
(x=[object Object], y=2)


/// Add
// point.add(new Point(1, 2))
(x=1, y=2)

// point.add({x: 3, y: 4})
(x=3, y=4)

// point.add(undefined)
(x=NaN, y=NaN)

// point
(x=0, y=0)


/// Subtract
// point.subtract(new Point(1, 2))
(x=-1, y=-2)

// point.subtract({x: 3, y: 4})
(x=-3, y=-4)

// point.subtract(undefined)
(x=NaN, y=NaN)

// point
(x=0, y=0)


/// Distance
// Point.distance(new Point(), new Point())
0

// Point.distance(new Point())
NaN

// Point.distance(new Point(), new Point(), new Point())
0

// Point.distance(new Point(-100, 200), new Point(100, 200))
200

// Point.distance({x: -100, y: 200}, new Point(100, 200))
undefined


/// Equals
// point.equals(new Point(1, 2))
false

// point.equals({x: 3, y: 4})
false

// point.equals(point)
true

// point
(x=0, y=0)


/// Clone
// point
(x=1, y=2)

// clone
(x=1, y=2)

// point === clone
false

// point.equals(clone)
true


/// Interpolate
// Point.interpolate(new Point(-100, -200), new Point(100, 200), -1)
(x=300, y=600)

// Point.interpolate(new Point(-100, -200), new Point(100, 200), 0)
(x=100, y=200)

// Point.interpolate(new Point(-100, -200), new Point(100, 200), 0.5)
(x=0, y=0)

// Point.interpolate(new Point(-100, -200), new Point(100, 200), 1)
(x=-100, y=-200)

// Point.interpolate(new Point(-100, -200), new Point(100, 200), 2)
(x=-300, y=-600)

// Point.interpolate(new Point(-100, -200), new Point(100, 200))
(x=NaN, y=NaN)

// Point.interpolate()
(x=NaN, y=NaN)

/// length
new Point().length
0

new Point(100, 0).length
100

new Point(0, -200).length
200


/// Normalize
// new Point() normalize(10)
(x=0, y=0)

// new Point() normalize(-5)
(x=0, y=0)

// new Point(100, 200) normalize(10)
(x=4.47213595499958, y=8.94427190999916)

// new Point(100, 200) normalize(-5)
(x=-2.23606797749979, y=-4.47213595499958)

// new Point(-200, 100) normalize(10)
(x=-8.94427190999916, y=4.47213595499958)

// new Point(-200, 100) normalize(-5)
(x=4.47213595499958, y=-2.23606797749979)

// new Point(-200, 100) normalize()
(x=NaN, y=NaN)

// new Point(NaN, 100) normalize()
(x=NaN, y=100)

// new Point(undefined, 100) normalize(3)
(x=undefined, y=100)

// new Point(100, null) normalize(1)
(x=100, y=null)


/// Offset
// point = new Point()
(x=0, y=0)

// point.offset(100, 200)
(x=100, y=200)

// point.offset(-1000, -2000)
(x=-900, y=-1800)

// point.offset(500)
(x=-400, y=NaN)


/// polar
// Point.polar(5, Math.atan(3/4))
(x=4, y=3)

// Point.polar(5)
(x=NaN, y=NaN)

// Point.polar(0, Math.atan(3/4))
(x=0, y=0)

