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

  # This test tries to sort very large array. Array#sort pre-processing does
  # not support huge sparse Arrays, so this test runs a very long time.
  # https://crbug.com/v8/8714
  'array-sort-small-sparse-array-with-large-length': [SKIP],

  # Slow tests.
  'dfg-double-vote-fuzz': [PASS, SLOW],
}],  # 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_run', {
  # 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_run'
['mode == debug and simulator_run', {
  # Too slow on debug simulators.
  'dfg-inline-function-dot-caller': [SKIP],
}],  # 'mode == debug 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 == 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

##############################################################################
['variant in [nooptimization, stress, stress_js_bg_compile_wasm_code_gc] and (arch == arm or arch == arm64) and simulator_run', {
  # Slow tests: https://crbug.com/v8/7783
  'dfg-double-vote-fuzz': [SKIP],
}],  # variant in [nooptimization, stress, stress_js_bg_compile_wasm_code_gc] and (arch == arm or arch == arm64) and simulator_run

##############################################################################
['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 == no_wasm_traps', {
  '*': [SKIP],
}],  # variant == no_wasm_traps

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

##############################################################################
['variant == jitless and not embedded_builtins', {
  '*': [SKIP],
}], # variant == jitless and not embedded_builtins

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