# Copyright 2011 the V8 project authors. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * 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.
#     * Neither the name of Google Inc. nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
# OWNER OR 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.

[
[ALWAYS, {
  ############################### BUGS ###################################

  '15.5.4.9_CE': [['no_i18n', SKIP]],

  ######################## NEEDS INVESTIGATION ###########################

  # These test failures are specific to the intl402 suite and need investigation
  # to be either marked as bugs with issues filed for them or as deliberate
  # incompatibilities if the test cases turn out to be broken or ambiguous.
  '6.2.3': [FAIL],
  '9.2.1_2': [FAIL],
  '9.2.5_11_g_ii_2': [FAIL],
  '9.2.6_2': [FAIL],
  '10.1.1_a': [FAIL],
  '10.1.1_19_c': [PASS, FAIL],
  '10.1.2.1_4': [FAIL],
  '10.2.3_b': [PASS, FAIL],
  '10.3_a': [FAIL],
  '11.1.1_17': [PASS, FAIL],
  '11.1.1_19': [PASS, FAIL],
  '11.1.1_20_c': [FAIL],
  '11.1.1_a': [FAIL],
  '11.1.2.1_4': [FAIL],
  '11.3.2_FN_2': [PASS, FAIL],
  '11.3.2_TRF': [PASS, FAIL],
  '11.3.2_TRP': [FAIL],
  '11.3_a': [FAIL],
  '12.1.1_a': [FAIL],
  '12.1.2.1_4': [FAIL],
  '12.3.2_FDT_7_a_iv': [FAIL],
  '12.3.3': [FAIL],
  '12.3_a': [FAIL],
  '15.5.4.9_3': [PASS, FAIL],

  ##################### DELIBERATE INCOMPATIBILITIES #####################

  # This tests precision of Math functions.  The implementation for those
  # trigonometric functions are platform/compiler dependent.  Furthermore, the
  # expectation values by far deviates from the actual result given by an
  # arbitrary-precision calculator, making those tests partly bogus.
  'S15.8.2.7_A7': [PASS, FAIL_OK],  # Math.cos
  'S15.8.2.8_A6': [PASS, FAIL_OK],  # Math.exp (less precise with --fast-math)
  'S15.8.2.16_A7': [PASS, FAIL_OK],  # Math.sin
  'S15.8.2.18_A7': [PASS, FAIL_OK],  # Math.tan

  # Linux for ia32 (and therefore simulators) default to extended 80 bit
  # floating point formats, so these tests checking 64-bit FP precision fail.
  # The other platforms/arch's pass these tests.
  # We follow the other major JS engines by keeping this default.
  'S8.5_A2.1': [PASS, FAIL_OK],
  'S8.5_A2.2': [PASS, FAIL_OK],

  ############################ INVALID TESTS #############################

  # The reference value calculated by Test262 is incorrect if you run these
  # tests in PST/PDT between first Sunday in March and first Sunday in April.
  # The DST switch was moved in 2007 whereas Test262 bases the reference value
  # on 2000. Test262 Bug: https://bugs.ecmascript.org/show_bug.cgi?id=293
  'S15.9.3.1_A5_T1': [PASS, FAIL_OK],
  'S15.9.3.1_A5_T2': [PASS, FAIL_OK],
  'S15.9.3.1_A5_T3': [PASS, FAIL_OK],
  'S15.9.3.1_A5_T4': [PASS, FAIL_OK],
  'S15.9.3.1_A5_T5': [PASS, FAIL_OK],
  'S15.9.3.1_A5_T6': [PASS, FAIL_OK],

  ############################ SKIPPED TESTS #############################

  # These tests take a looong time to run in debug mode.
  'S15.1.3.1_A2.5_T1': [PASS, ['mode == debug', SKIP]],
  'S15.1.3.2_A2.5_T1': [PASS, ['mode == debug', SKIP]],
}],  # ALWAYS

['arch == arm or arch == mipsel or arch == arm64', {

  # TODO(mstarzinger): Causes stack overflow on simulators due to eager
  # compilation of parenthesized function literals. Needs investigation.
  'S13.2.1_A1_T1': [SKIP],

  # BUG(3251225): Tests that timeout with --nocrankshaft.
  'S15.1.3.1_A2.4_T1': [SKIP],
  'S15.1.3.1_A2.5_T1': [SKIP],
  'S15.1.3.2_A2.4_T1': [SKIP],
  'S15.1.3.2_A2.5_T1': [SKIP],
  'S15.1.3.3_A2.3_T1': [SKIP],
  'S15.1.3.4_A2.3_T1': [SKIP],
}],  # 'arch == arm or arch == mipsel or arch == arm64'
]
