# Copyright 2013 the V8 project authors. All rights reserved.
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This test checks a few Number.toFixed cases, including 5307: Number.toFixed does not round 0.5 up and 5308: Number.toFixed does not include leading zero.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS (0).toFixed(0) is '0'
PASS (0.49).toFixed(0) is '0'
PASS (0.5).toFixed(0) is '1'
PASS (0.51).toFixed(0) is '1'
PASS (-0.49).toFixed(0) is '-0'
PASS (-0.5).toFixed(0) is '-1'
PASS (-0.51).toFixed(0) is '-1'
PASS (0).toFixed(1) is '0.0'
PASS (0.449).toFixed(1) is '0.4'
PASS (0.45).toFixed(1) is '0.5'
PASS (0.451).toFixed(1) is '0.5'
PASS (0.5).toFixed(1) is '0.5'
PASS (0.549).toFixed(1) is '0.5'
PASS (0.55).toFixed(1) is '0.6'
PASS (0.551).toFixed(1) is '0.6'
PASS (-0.449).toFixed(1) is '-0.4'
PASS (-0.45).toFixed(1) is '-0.5'
PASS (-0.451).toFixed(1) is '-0.5'
PASS (-0.5).toFixed(1) is '-0.5'
PASS (-0.549).toFixed(1) is '-0.5'
PASS (-0.55).toFixed(1) is '-0.6'
PASS (-0.551).toFixed(1) is '-0.6'
PASS (0.0).toFixed(4) is "0.0000"
PASS (-0.0).toFixed(4) is "0.0000"
PASS (0.0).toFixed() is "0"
PASS (-0.0).toFixed() is "0"
PASS (1234.567).toFixed() is "1235"
PASS (1234.567).toFixed(0) is "1235"
PASS (1234.567).toFixed(null) is "1235"
PASS (1234.567).toFixed(false) is "1235"
PASS (1234.567).toFixed('foo') is "1235"
PASS (1234.567).toFixed(nan) is "1235"
PASS (1234.567).toFixed(1) is "1234.6"
PASS (1234.567).toFixed(true) is "1234.6"
PASS (1234.567).toFixed('1') is "1234.6"
PASS (1234.567).toFixed(2) is "1234.57"
PASS (1234.567).toFixed(2.9) is "1234.57"
PASS (1234.567).toFixed(5) is "1234.56700"
PASS (1234.567).toFixed(20) is "1234.56700000000000727596"
FAIL (1234.567).toFixed(21) should throw an exception. Was 1234.567000000000007275958.
FAIL (1234.567).toFixed(100) should throw an exception. Was 1234.5670000000000072759576141834259033203125000000000000000000000000000000000000000000000000000000000000.
PASS (1234.567).toFixed(101) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(-1) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(-4) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(-5) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(-20) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(-21) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(posInf) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS (1234.567).toFixed(negInf) threw exception RangeError: toFixed() digits argument must be between 0 and 100.
PASS posInf.toFixed() is "Infinity"
PASS negInf.toFixed() is "-Infinity"
PASS nan.toFixed() is "NaN"
PASS successfullyParsed is true

TEST COMPLETE

