# Copyright 2012 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, {
  # All tests in the bug directory are expected to fail.
  'bugs/*': [FAIL],

  ##############################################################################
  # Flaky tests.
  # BUG(v8:2921).
  'debug-step-4-in-frame': [PASS, FAIL, SLOW],

  ##############################################################################
  # Fails.
  'regress/regress-1119': [FAIL],

  # Issue 1719: Slow to collect arrays over several contexts.
  'regress/regress-524': [SKIP],
  # When that bug is fixed, revert the expectation to:
  # Skip long running test in debug and allow it to timeout in release mode.
  # regress/regress-524: [PASS, TIMEOUT, ['mode == debug', SKIP]],

  # This test non-deterministically runs out of memory on Windows ia32.
  'regress/regress-crbug-160010': [SKIP],

  ##############################################################################
  # Too slow in debug mode with --stress-opt mode.
  'compiler/regress-stacktrace-methods': [PASS, ['mode == debug', SKIP]],
  'compiler/regress-funcaller': [PASS, ['mode == debug', SKIP]],
  'regress/regress-2318': [PASS, ['mode == debug', SKIP]],
  'regress/regress-create-exception': [PASS, ['mode == debug', SKIP]],

  ##############################################################################
  # Too slow in debug mode for GC stress mode.
  'regress/regress-crbug-217858': [PASS, ['mode == debug', SKIP]],

  ##############################################################################
  # Only regexp stuff tested, no need for extensive Crankshaft tests.
  'regexp-global': [PASS, NO_VARIANTS],

  ##############################################################################
  # No need to waste time for this test.
  'd8-performance-now': [PASS, NO_VARIANTS],

  ##############################################################################
  # These use a built-in that's only present in debug mode. They take
  # too long to run in debug mode on ARM and MIPS.
  'fuzz-natives-part*': [PASS, ['mode == release or arch == arm or arch == android_arm or arch == mipsel', SKIP]],

  'big-object-literal': [PASS, ['arch == arm or arch == android_arm', SKIP]],

  # Issue 488: this test sometimes times out.
  'array-constructor': [PASS, TIMEOUT],

  # Very slow on ARM and MIPS, contains no architecture dependent code.
  'unicode-case-overoptimization': [PASS, NO_VARIANTS, ['arch == arm or arch == android_arm or arch == mipsel', TIMEOUT]],

  ##############################################################################
  # This test expects to reach a certain recursion depth, which may not work
  # for debug mode.
  'json-recursive': [PASS, ['mode == debug', PASS, FAIL]],

  ##############################################################################
  # Skip long running tests that time out in debug mode.
  'generated-transition-stub': [PASS, ['mode == debug', SKIP]],

  ##############################################################################
  # This test sets the umask on a per-process basis and hence cannot be
  # used in multi-threaded runs.
  # On android there is no /tmp directory.
  'd8-os': [PASS, ['isolates or arch == android_arm or arch == android_ia32', SKIP]],
  'tools/tickprocessor': [PASS, ['arch == android_arm or arch == android_ia32', SKIP]],

  ##############################################################################
  # Long running test that reproduces memory leak and should be run manually.
  'regress/regress-2073': [SKIP],
}],  # ALWAYS

##############################################################################
['arch == arm or arch == android_arm', {

  # Slow tests which times out in debug mode.
  'try': [PASS, ['mode == debug', SKIP]],
  'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
  'array-constructor': [PASS, ['mode == debug', SKIP]],
  'regress/regress-1122': [PASS, ['mode == debug and arch == android_arm', SKIP]],

  # Flaky test that can hit compilation-time stack overflow in debug mode.
  'unicode-test': [PASS, ['mode == debug', PASS, FAIL]],

  # Times out often in release mode on ARM.
  'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
  'array-splice': [PASS, TIMEOUT],

  # Long running test.
  'string-indexof-2': [PASS, TIMEOUT],
  'mirror-object': [PASS, TIMEOUT],

  # BUG(3251035): Timeouts in long looping crankshaft optimization
  # tests. Skipping because having them timeout takes too long on the
  # buildbot.
  'compiler/alloc-number': [SKIP],
  'compiler/array-length': [SKIP],
  'compiler/assignment-deopt': [SKIP],
  'compiler/deopt-args': [SKIP],
  'compiler/inline-compare': [SKIP],
  'compiler/inline-global-access': [SKIP],
  'compiler/optimized-function-calls': [SKIP],
  'compiler/pic': [SKIP],
  'compiler/property-calls': [SKIP],
  'compiler/recursive-deopt': [SKIP],
  'compiler/regress-4': [SKIP],
  'compiler/regress-funcaller': [SKIP],
  'compiler/regress-rep-change': [SKIP],
  'compiler/regress-arguments': [SKIP],
  'compiler/regress-funarguments': [SKIP],
  'compiler/regress-3249650': [SKIP],
  'compiler/simple-deopt': [SKIP],
  'regress/regress-490': [SKIP],
  'regress/regress-634': [SKIP],
  'regress/regress-create-exception': [SKIP],
  'regress/regress-3218915': [SKIP],
  'regress/regress-3247124': [SKIP],

  # Requires bigger stack size in the Genesis and if stack size is increased,
  # the test requires too much time to run.  However, the problem test covers
  # should be platform-independent.
  'regress/regress-1132': [SKIP],

  # Stack manipulations in LiveEdit is not implemented for this arch.
  'debug-liveedit-check-stack': [SKIP],
  'debug-liveedit-stack-padding': [SKIP],
  'debug-liveedit-restart-frame': [SKIP],
  'debug-liveedit-double-call': [SKIP],

  # Currently always deopt on minus zero
  'math-floor-of-div-minus-zero': [SKIP],

  ############################################################################
  # Slow tests.
  'regress/regress-2185-2': [PASS, SLOW],
  'mirror-object': [PASS, SLOW],
  'compiler/osr-with-args': [PASS, SLOW],
  'array-sort': [PASS, SLOW],
  'packed-elements': [PASS, SLOW],
  'regress/regress-91008': [PASS, SLOW],
  'regress/regress-2790': [PASS, SLOW],
  'regress/regress-json-stringify-gc': [PASS, SLOW],
  'regress/regress-1122': [PASS, SLOW],
}],  # 'arch == arm or arch == android_arm'

##############################################################################
['arch == mipsel', {

  # Slow tests which times out in debug mode.
  'try': [PASS, ['mode == debug', SKIP]],
  'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
  'array-constructor': [PASS, ['mode == debug', SKIP]],

  # Times out often in release mode on MIPS.
  'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
  'array-splice': [PASS, TIMEOUT],

  # Long running test.
  'mirror-object': [PASS, TIMEOUT],
  'string-indexof-2': [PASS, TIMEOUT],

  # BUG(3251035): Timeouts in long looping crankshaft optimization
  # tests. Skipping because having them timeout takes too long on the
  # buildbot.
  'compiler/alloc-number': [SKIP],
  'compiler/array-length': [SKIP],
  'compiler/assignment-deopt': [SKIP],
  'compiler/deopt-args': [SKIP],
  'compiler/inline-compare': [SKIP],
  'compiler/inline-global-access': [SKIP],
  'compiler/optimized-function-calls': [SKIP],
  'compiler/pic': [SKIP],
  'compiler/property-calls': [SKIP],
  'compiler/recursive-deopt': [SKIP],
  'compiler/regress-4': [SKIP],
  'compiler/regress-funcaller': [SKIP],
  'compiler/regress-rep-change': [SKIP],
  'compiler/regress-arguments': [SKIP],
  'compiler/regress-funarguments': [SKIP],
  'compiler/regress-3249650': [SKIP],
  'compiler/simple-deopt': [SKIP],
  'regress/regress-490': [SKIP],
  'regress/regress-634': [SKIP],
  'regress/regress-create-exception': [SKIP],
  'regress/regress-3218915': [SKIP],
  'regress/regress-3247124': [SKIP],

  # Requires bigger stack size in the Genesis and if stack size is increased,
  # the test requires too much time to run.  However, the problem test covers
  # should be platform-independent.
  'regress/regress-1132': [SKIP],

  # Stack manipulations in LiveEdit is not implemented for this arch.
  'debug-liveedit-check-stack': [SKIP],
  'debug-liveedit-stack-padding': [SKIP],
  'debug-liveedit-restart-frame': [SKIP],
  'debug-liveedit-double-call': [SKIP],

  # Currently always deopt on minus zero
  'math-floor-of-div-minus-zero': [SKIP],
}],  # 'arch == mipsel'

##############################################################################
# Native Client uses the ARM simulator so will behave similarly to arm
# on mjsunit tests.
# TODO(bradchen): enable more tests for NaCl V8 when it stops using
# the ARM simulator.
##############################################################################
['arch == nacl_ia32 or arch == nacl_x64', {
  # There is no /tmp directory for NaCl runs
  'd8-os': [SKIP],

  # Stack manipulations in LiveEdit is not implemented for this arch.
  'debug-liveedit-check-stack': [SKIP],
  'debug-liveedit-stack-padding': [SKIP],
  'debug-liveedit-restart-frame': [SKIP],
  'debug-liveedit-double-call': [SKIP],

  # This test dumps core for arm.debug, so no reason to expect it to work
  # for NaCl. The other three fuzz-natives tests seem to run fine.
  # As noted above none of them are run in the arm.debug case.
  'fuzz-natives-part4': [SKIP],

  # NaCl builds have problems with this test since Pepper_28.
  # V8 Issue 2786
  'math-exp-precision': [SKIP],

  # Requires bigger stack size in the Genesis and if stack size is increased,
  # the test requires too much time to run.  However, the problem test covers
  # should be platform-independent.
  'regress/regress-1132': [SKIP],

  # Poor performance for NaCl V8 causes an assertion failure for this test.
  'regress/regress-165637': [SKIP],

  # Skip long running test that times out in debug mode and goes OOM on NaCl.
  'regress/regress-crbug-160010': [SKIP],

  # Bug(v8:2978).
  'lithium/MathExp': [PASS, FAIL],
}],  # 'arch == nacl_ia32 or arch == nacl_x64'

##############################################################################
['deopt_fuzzer == True', {

  # Skip tests that are not suitable for deoptimization fuzzing.
  'assert-opt-and-deopt': [SKIP],
  'never-optimize': [SKIP],
  'regress/regress-2185-2': [SKIP],
  'harmony/object-observe': [SKIP],
  'readonly': [SKIP],
  'array-feedback': [SKIP],

  # Deopt every n garbage collections collides with deopt every n times.
  'regress/regress-2653': [SKIP],
}],  # 'deopt_fuzzer == True'
]