// 0 + 0
0
// 0 + 0
0

// 1 + 2
3
// 2 + 1
3

// NaN + 1
NaN
// 1 + NaN
NaN

// NaN + NaN
NaN
// NaN + NaN
NaN

// Infinity + Infinity
Infinity
// Infinity + Infinity
Infinity

// Infinity + -Infinity
NaN
// -Infinity + Infinity
NaN

// false + false
0
// false + false
0

// true + false
1
// false + true
1

// true + true
2
// true + true
2

// true + false
1
// false + true
1

// false + 1
1
// 1 + false
1

// true + 1
2
// 1 + true
2

// abc + 1
abc1
// 1 + abc
1abc

// abc + false
abcfalse
// false + abc
falseabc

// abc + true
abctrue
// true + abc
trueabc

// 500 + 1
5001
// 1 + 500
1500

// 500 + false
500false
// false + 500
false500

// 500 + true
500true
// true + 500
true500

// undefined + undefined
NaN
// undefined + undefined
NaN

// undefined + 1
NaN
// 1 + undefined
NaN

// undefined + abc
undefinedabc
// abc + undefined
abcundefined

// null + 1
NaN
// 1 + null
NaN

// null + null
NaN
// null + null
NaN

// null + undefined
NaN
// undefined + null
NaN

// null + false
NaN
// false + null
NaN

// null + true
NaN
// true + null
NaN

// null + abc
nullabc
// abc + null
abcnull

// _level0 + 1
NaN
// 1 + _level0
NaN

// _level0 + false
NaN
// false + _level0
NaN

// _level0 + true
NaN
// true + _level0
NaN

// _level0 + abc
_level0abc
// abc + _level0
abc_level0

// _level0 + undefined
NaN
// undefined + _level0
NaN

// obj + 1
NaN
// 1 + obj
NaN

// obj + false
NaN
// false + obj
NaN

// obj + true
NaN
// true + obj
NaN

// obj + abc
[object Object]abc
// abc + obj
abc[object Object]

// obj + undefined
NaN
// undefined + obj
NaN

// obj + null
NaN
// null + obj
NaN

// obj + _level0
NaN
// _level0 + obj
NaN

// obj + obj
NaN
// obj + obj
NaN

// objValue1 + 1
objValue1.valueOf
2
// 1 + objValue1
objValue1.valueOf
2

// objValue1 + false
objValue1.valueOf
1
// false + objValue1
objValue1.valueOf
1

// objValue1 + true
objValue1.valueOf
2
// true + objValue1
objValue1.valueOf
2

// objValue1 + abc
objValue1.valueOf
1abc
// abc + objValue1
objValue1.valueOf
abc1

// objValue1 + undefined
objValue1.valueOf
NaN
// undefined + objValue1
objValue1.valueOf
NaN

// objValue1 + null
objValue1.valueOf
NaN
// null + objValue1
objValue1.valueOf
NaN

// objValue1 + _level0
objValue1.valueOf
NaN
// _level0 + objValue1
objValue1.valueOf
NaN

// objValue1 + obj
objValue1.valueOf
NaN
// obj + objValue1
objValue1.valueOf
NaN

// objValue1 + obj
objValue1.valueOf
NaN
// obj + objValue1
objValue1.valueOf
NaN

// objValue1 + objValue1
objValue1.valueOf
objValue1.valueOf
2
// objValue1 + objValue1
objValue1.valueOf
objValue1.valueOf
2

// objValue1 + objValue2
objValue2.valueOf
objValue1.valueOf
1xyz
// objValue2 + objValue1
objValue1.valueOf
objValue2.valueOf
xyz1

// objValue1 + objValue3
objValue3.valueOf
objValue1.valueOf
objValue3.valueOf
NaN
// objValue3 + objValue1
objValue1.valueOf
objValue3.valueOf
objValue3.valueOf
NaN

// objValue1 + objValue4
objValue4.valueOf
objValue1.valueOf
NaN
// objValue4 + objValue1
objValue1.valueOf
objValue4.valueOf
NaN

// objValue2 + obj
objValue2.valueOf
xyz[object Object]
// obj + objValue2
objValue2.valueOf
[object Object]xyz

// objValue2 + objValue2
objValue2.valueOf
objValue2.valueOf
xyzxyz
// objValue2 + objValue2
objValue2.valueOf
objValue2.valueOf
xyzxyz

// objValue2 + objValue3
objValue3.valueOf
objValue2.valueOf
objValue3.toString
xyz[type Object]
// objValue3 + objValue2
objValue2.valueOf
objValue3.valueOf
objValue3.toString
[type Object]xyz

// objValue3 + obj
objValue3.valueOf
objValue3.valueOf
NaN
// obj + objValue3
objValue3.valueOf
objValue3.valueOf
NaN

// objValue3 + objValue4
objValue4.valueOf
objValue3.valueOf
objValue3.valueOf
NaN
// objValue4 + objValue3
objValue3.valueOf
objValue4.valueOf
objValue3.valueOf
NaN

// objValue4 + obj
objValue4.valueOf
NaN
// obj + objValue4
objValue4.valueOf
NaN

