# 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],
  # Irregexp interpreter overflows stack. We should just not crash.
  'fast/js/regexp-stack-overflow': [PASS, FAIL],
}],  # ALWAYS
['system == windows', {
  # Exceeds call stack on windows after MSVS2017 switch.
  'fast/js/excessive-comma-usage': [SKIP],
}],  # system == windows
['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', {
  'dfg-int-overflow-in-loop': [SKIP],
}],  # 'arch == arm64 and simulator_run'
['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', {
  # 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'

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

##############################################################################
['arch == arm64 and msan', {
  # Stack size too large with masm on Arm64.
  'fast/js/excessive-comma-usage': [SKIP],
}],  # arch == arm64 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'

##############################################################################
['variant == wasm_traps', {
  '*': [SKIP],
}],  # variant == wasm_traps

##############################################################################
['no_i18n == True', {
  'fast/js/string-capitalization': [FAIL],
}],  # variant == wasm_traps

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