'use strict'; var test = require('tape'); var inspect = require('object-inspect'); var is = require('object-is'); var forEach = require('for-each'); var hasSymbols = require('has-symbols')(); var hasBigInts = require('has-bigints')(); var unboxPrimitive = require('..'); var debug = function (v, m) { return inspect(v) + ' ' + m; }; test('primitives', function (t) { var primitives = [ true, false, '', 'foo', 42, NaN, Infinity, 0 ]; if (hasSymbols) { primitives.push(Symbol(), Symbol.iterator, Symbol('f')); } if (hasBigInts) { primitives.push(BigInt(42), BigInt(0)); } forEach(primitives, function (primitive) { var obj = Object(primitive); t.ok( is(unboxPrimitive(obj), primitive), debug(obj, 'unboxes to ' + inspect(primitive)) ); }); t.end(); }); test('objects', function (t) { var objects = [ {}, [], function () {}, /a/g, new Date() ]; forEach(objects, function (object) { t['throws']( function () { unboxPrimitive(object); }, TypeError, debug(object, 'is not a primitive') ); }); t.end(); });