# Copyright 2013 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, {
  # Flaky tests.
  # BUG(v8:2989).
  'dfg-inline-arguments-become-double': [PASS, FAIL],
  'dfg-inline-arguments-become-int32': [PASS, FAIL],
  'dfg-inline-arguments-reset': [PASS, FAIL],
  'dfg-inline-arguments-reset-changetype': [PASS, FAIL],
  # TODO(turbofan): We run out of stack earlier on 64-bit for now.
  'fast/js/deep-recursion-test': [PASS, NO_VARIANTS],
  # Irregexp interpreter overflows stack. We should just not crash.
  'fast/js/regexp-stack-overflow': [PASS, FAIL],
}],  # ALWAYS
['mode == debug', {
  # Too slow in debug mode.
  'dfg-int-overflow-in-loop': [SKIP],
  'dfg-double-vote-fuzz': [SKIP],
  'reentrant-caching': [SKIP],
  'sort-large-array': [SKIP],
  # Too slow with --enable-slow-asserts.
  'array-iterate-backwards': [SKIP],
}],  # 'mode == debug'
['simulator', {
  # Skip tests that timeout with turbofan.
  'array-iterate-backwards': [PASS, NO_VARIANTS],
  'function-apply-aliased': [SKIP],

  # Skip tests that are too slow for simulators.
  'dfg-int-overflow-in-loop': [SKIP],
}],  # 'simulator'
['arch == arm64 and simulator_run == True', {
  'dfg-int-overflow-in-loop': [SKIP],
}],  # 'arch == arm64 and simulator_run == True'
['dcheck_always_on == True and (arch == arm or arch == arm64)', {
  # Doesn't work with gcc 4.6 on arm or arm64 for some reason.
  'reentrant-caching': [SKIP],
}],  # 'dcheck_always_on == True and (arch == arm or arch == arm64)'
['arch == mips', {
  # Too slow for mips big-endian boards on bots (no FPU).
  'dfg-int-overflow-in-loop': [SKIP],
}], # 'arch == mips'
['(arch == ppc or arch == ppc64) and simulator_run == True', {
  # Too slow.
  'dfg-int-overflow-in-loop': [SKIP],
}], # 'arch == ppc or arch == ppc64'
['arch == s390 or arch == s390x', {
  # Too slow.
  'dfg-int-overflow-in-loop': [SKIP],
}],  # 'arch == s390 or arch == s390x'
['arch == x87', {
  # Too slow.
  'dfg-negative-array-index': [SKIP],
}], # 'arch == x87'

##############################################################################
['asan == True', {
  # Skip tests not suitable for ASAN.
  'fast/js/excessive-comma-usage': [SKIP],

  # BUG(v8:4499).
  'run-json-stringify': [SKIP],
}],  # 'asan == True'

##############################################################################
['isolates', {
  # BUG(v8:4499).
  '*': [SKIP],
}],  # 'isolates'

##############################################################################
['gc_stress == True', {
  # Tests taking too long
  'fast/js/excessive-comma-usage': [SKIP]
}],  # 'gc_stress == True'

['gc_stress == True and mode == debug', {
  # Skip tests that timeout.
}],  # 'gc_stress == True and mode == debug'

##############################################################################
['msan', {
  # TODO(mythria,4680): Too slow and timeout on ignition.
  'dfg-double-vote-fuzz': [PASS, NO_IGNITION],
  'dfg-int-overflow-in-loop': [PASS, NO_IGNITION],
}],  # msan

##############################################################################
['(ignition or ignition_turbofan) and msan', {
  # TODO(mythria,4680): Too slow and timeout on ignition.
  'dfg-double-vote-fuzz': [SKIP],
  'dfg-int-overflow-in-loop': [SKIP],
}],  # (ignition or ignition_turbofan) and msan

##############################################################################
['gcov_coverage', {
  # Tests taking too long or getting too large call stacks.
  'fast/js/excessive-comma-usage': [SKIP],
  'run-json-stringify': [SKIP],
}],  # 'gcov_coverage'

##############################################################################
]
