// Math.abs()
NaN
// Math.abs(null)
0
// Math.abs(undefined)
0
// Math.abs(true)
1
// Math.abs(false)
0
// Math.abs(-1)
1
// Math.abs(NaN)
NaN
// Math.abs(Infinity)
Infinity
// Math.abs(-Infinity)
Infinity
// Math.abs({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.abs({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
3

// Math.sin()
NaN
// Math.sin(null)
0
// Math.sin(undefined)
0
// Math.sin(true)
0.841470984807897
// Math.sin(false)
0
// Math.sin(-1)
-0.841470984807897
// Math.sin(NaN)
NaN
// Math.sin(Infinity)
NaN
// Math.sin(-Infinity)
NaN
// Math.sin(1.5707963267949)
1
// Math.sin({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
0.909297426825682
// Math.sin({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
0.141120008059867

// Math.cos()
NaN
// Math.cos(null)
1
// Math.cos(undefined)
1
// Math.cos(true)
0.54030230586814
// Math.cos(false)
1
// Math.cos(-1)
0.54030230586814
// Math.cos(NaN)
NaN
// Math.cos(Infinity)
NaN
// Math.cos(-Infinity)
NaN
// Math.cos(3.14159265358979)
-1
// Math.cos({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
-0.416146836547142
// Math.cos({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
-0.989992496600445

// Math.tan()
NaN
// Math.tan(null)
0
// Math.tan(undefined)
0
// Math.tan(true)
1.5574077246549
// Math.tan(false)
0
// Math.tan(-1)
-1.5574077246549
// Math.tan(NaN)
NaN
// Math.tan(Infinity)
NaN
// Math.tan(-Infinity)
NaN
// Math.tan({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
-2.18503986326152
// Math.tan({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
-0.142546543074278

// Math.exp()
NaN
// Math.exp(null)
1
// Math.exp(undefined)
1
// Math.exp(true)
2.71828182845905
// Math.exp(false)
1
// Math.exp(-1)
0.367879441171442
// Math.exp(NaN)
NaN
// Math.exp(Infinity)
Infinity
// Math.exp(-Infinity)
0
// Math.exp({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
7.38905609893065
// Math.exp({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
20.0855369231877

// Math.log()
NaN
// Math.log(null)
-Infinity
// Math.log(undefined)
-Infinity
// Math.log(true)
0
// Math.log(false)
-Infinity
// Math.log(-1)
NaN
// Math.log(NaN)
NaN
// Math.log(Infinity)
Infinity
// Math.log(-Infinity)
NaN
// Math.log({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
0.693147180559945
// Math.log({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
1.09861228866811

// Math.sqrt()
NaN
// Math.sqrt(null)
0
// Math.sqrt(undefined)
0
// Math.sqrt(true)
1
// Math.sqrt(false)
0
// Math.sqrt(-1)
NaN
// Math.sqrt(NaN)
NaN
// Math.sqrt(Infinity)
Infinity
// Math.sqrt(-Infinity)
NaN
// Math.sqrt({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
1.4142135623731
// Math.sqrt({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
1.73205080756888

// Math.round()
NaN
// Math.round(null)
0
// Math.round(undefined)
0
// Math.round(true)
1
// Math.round(false)
0
// Math.round(-1)
-1
// Math.round(NaN)
NaN
// Math.round(Infinity)
Infinity
// Math.round(-Infinity)
-Infinity
// Math.round(23.2)
23
// Math.round(23.7)
24
// Math.round(-23.2)
-23
// Math.round(-23.7)
-24
// Math.round(12.5)
13
// Math.round(-12.5)
-12
// Math.round({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.round({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
3

// Math.floor()
NaN
// Math.floor(null)
0
// Math.floor(undefined)
0
// Math.floor(true)
1
// Math.floor(false)
0
// Math.floor(-1)
-1
// Math.floor(NaN)
NaN
// Math.floor(Infinity)
Infinity
// Math.floor(-Infinity)
-Infinity
// Math.floor(12.5)
12
// Math.floor(-12.5)
-13
// Math.floor({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.floor({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
3

// Math.ceil()
NaN
// Math.ceil(null)
0
// Math.ceil(undefined)
0
// Math.ceil(true)
1
// Math.ceil(false)
0
// Math.ceil(-1)
-1
// Math.ceil(NaN)
NaN
// Math.ceil(Infinity)
Infinity
// Math.ceil(-Infinity)
-Infinity
// Math.ceil(12.5)
13
// Math.ceil(-12.5)
-12
// Math.ceil({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.ceil({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
3

// Math.atan()
NaN
// Math.atan(null)
0
// Math.atan(undefined)
0
// Math.atan(true)
0.785398163397448
// Math.atan(false)
0
// Math.atan(-1)
-0.785398163397448
// Math.atan(NaN)
NaN
// Math.atan(Infinity)
1.5707963267949
// Math.atan(-Infinity)
-1.5707963267949
// Math.atan({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
1.10714871779409
// Math.atan({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
1.24904577239825

// Math.asin()
NaN
// Math.asin(null)
0
// Math.asin(undefined)
0
// Math.asin(true)
1.5707963267949
// Math.asin(false)
0
// Math.asin(-1)
-1.5707963267949
// Math.asin(NaN)
NaN
// Math.asin(Infinity)
NaN
// Math.asin(-Infinity)
NaN
// Math.asin({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
NaN
// Math.asin({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
NaN

// Math.acos()
NaN
// Math.acos(null)
1.5707963267949
// Math.acos(undefined)
1.5707963267949
// Math.acos(true)
0
// Math.acos(false)
1.5707963267949
// Math.acos(-1)
3.14159265358979
// Math.acos(NaN)
NaN
// Math.acos(Infinity)
NaN
// Math.acos(-Infinity)
NaN
// Math.acos({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
NaN
// Math.acos({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
NaN

// Math.atan2()
NaN
// Math.atan2(null)
NaN
// Math.atan2(undefined)
NaN
// Math.atan2(true)
NaN
// Math.atan2(false)
NaN
// Math.atan2(-1)
NaN
// Math.atan2(NaN)
NaN
// Math.atan2(Infinity)
NaN
// Math.atan2(-Infinity)
NaN
// Math.atan2(2, null)
1.5707963267949
// Math.atan2(2, undefined)
1.5707963267949
// Math.atan2(null, 2)
0
// Math.atan2(undefined, 2)
0
// Math.atan2({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
1.10714871779409
// Math.atan2({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
0.982793723247329

// Math.min()
Infinity
// Math.min(null)
NaN
// Math.min(undefined)
NaN
// Math.min(true)
NaN
// Math.min(false)
NaN
// Math.min(-1)
NaN
// Math.min(NaN)
NaN
// Math.min(Infinity)
NaN
// Math.min(-Infinity)
NaN
// Math.min(2, null)
0
// Math.min(2, undefined)
0
// Math.min(null, 2)
0
// Math.min(undefined, 2)
0
// Math.min({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
1
// Math.min({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
2

// Math.max()
-Infinity
// Math.max(null)
NaN
// Math.max(undefined)
NaN
// Math.max(true)
NaN
// Math.max(false)
NaN
// Math.max(-1)
NaN
// Math.max(NaN)
NaN
// Math.max(Infinity)
NaN
// Math.max(-Infinity)
NaN
// Math.max(2, null)
2
// Math.max(2, undefined)
2
// Math.max(null, 2)
2
// Math.max(undefined, 2)
2
// Math.max({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.max({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
3

// Math.pow()
NaN
// Math.pow(null)
NaN
// Math.pow(undefined)
NaN
// Math.pow(true)
1
// Math.pow(false)
NaN
// Math.pow(-1)
NaN
// Math.pow(NaN)
NaN
// Math.pow(Infinity)
NaN
// Math.pow(-Infinity)
NaN
// Math.pow(2, null)
1
// Math.pow(2, undefined)
1
// Math.pow(null, 2)
0
// Math.pow(undefined, 2)
0
// Math.pow({ v: 2 }, { v: 1 })
valueOf called: 2
valueOf called: 1
2
// Math.pow({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
9

// Math.random({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
#RANDOM#

// ASnative(200, 50)()
NaN
// ASnative(200, 50)({ v: 3 }, { v: 2 }, { v: 1 })
valueOf called: 3
valueOf called: 2
NaN

// Math.min({ throw A }, { throw B })
will throw A!
caught: A
