# 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 ensures that NaN is handled correctly when converting numeric expressions to booleans.

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


PASS NaN ? true : false is false
PASS 1 ? true : false is true
PASS 0 ? true : false is false
PASS -1 ? true : false is true
PASS 1 * -1 ? true : false is true
PASS 1 * 0 ? true : false is false
PASS 1 * 1 ? true : false is true
PASS 1 / -1 ? true : false is true
PASS 1 / 0 ? true : false is true
PASS 1 / 1 ? true : false is true
PASS 1 % 2 ? true : false is true
PASS 1 % 1 ? true : false is false
PASS 1 + -1 ? true : false is false
PASS 1 + 0 ? true : false is true
PASS 1 + 1 ? true : false is true
PASS 1 - -1 ? true : false is true
PASS 1 - 0 ? true : false is true
PASS 1 - 1 ? true : false is false
PASS 1 & -1 ? true : false is true
PASS 1 & 0 ? true : false is false
PASS 1 & 1 ? true : false is true
PASS 1 | -1 ? true : false is true
PASS 1 | 0 ? true : false is true
PASS 1 | 1 ? true : false is true
PASS 1 ^ -1 ? true : false is true
PASS 1 ^ 0 ? true : false is true
PASS 1 ^ 1 ? true : false is false
PASS NaN * -1 ? true : false is false
PASS NaN * 0? true : false is false
PASS NaN * 1? true : false is false
PASS NaN / -1 ? true : false is false
PASS NaN / 0? true : false is false
PASS NaN / 1? true : false is false
PASS NaN % -1 ? true : false is false
PASS NaN % 0? true : false is false
PASS NaN % 1? true : false is false
PASS NaN + -1 ? true : false is false
PASS NaN + 0? true : false is false
PASS NaN + 1? true : false is false
PASS NaN - -1 ? true : false is false
PASS NaN - 0? true : false is false
PASS NaN - 1? true : false is false
PASS NaN & -1 ? true : false is false
PASS NaN & 0? true : false is false
PASS NaN & 1? true : false is false
PASS NaN | -1 ? true : false is true
PASS NaN | 0? true : false is false
PASS NaN | 1? true : false is true
PASS NaN ^ -1 ? true : false is true
PASS NaN ^ 0? true : false is false
PASS NaN ^ 1? true : false is true
PASS +NaN ? true : false is false
PASS -NaN ? true : false is false
PASS NaN && true ? true : false is false
PASS NaN && false ? true : false is false
PASS NaN || true ? true : false is true
PASS NaN || false ? true : false is false
PASS (function(){var nan = NaN; return nan-- ? true : false})() is false
PASS (function(){var nan = NaN; return nan++ ? true : false})() is false
PASS (function(){var nan = NaN; return --nan ? true : false})() is false
PASS (function(){var nan = NaN; return ++nan ? true : false})() is false
PASS (function(){var Undefined = undefined; return Undefined-- ? true : false})() is false
PASS (function(){var Undefined = undefined; return Undefined++ ? true : false})() is false
PASS (function(){var Undefined = undefined; return --Undefined ? true : false})() is false
PASS (function(){var Undefined = undefined; return ++Undefined ? true : false})() is false
PASS successfullyParsed is true

TEST COMPLETE

