# 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 ###################################

  # Sequencing of getter side effects on receiver and argument properties
  # is wrong. The receiver callback should be called before any arguments
  # are evaluated.
  # V8 Bug: http://code.google.com/p/v8/issues/detail?id=691
  '11.2.3-3_3': [FAIL],

  '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', {

  # 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'
]
