# Copyright 2014 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

[
##############################################################################
['system == macos and asan', {
  # BUG(820416).
  'BitsDeathTest*': [SKIP],
  'LiveRangeUnitTest*': [SKIP],
  'LoggingDeathTest*': [SKIP],
  'LoggingTest.CompareClassTypes': [SKIP],
  'LoggingTest.CompareWithDifferentSignedness': [SKIP],
  'LoggingTest.CompareWithReferenceType': [SKIP],
  'RandomNumberGenerator.NextSampleInvalidParam': [SKIP],
  'RandomNumberGenerator.NextSampleSlowInvalidParam1': [SKIP],
  'RandomNumberGenerator.NextSampleSlowInvalidParam2': [SKIP],
}],  # system == macos and asan

['system == macos and arch == arm64 and not simulator_run', {
  # Throwing C++ exceptions doesn't work; probably because the unittests
  # binary is built with -fno-exceptions?
  'LanguageServerJson.LexerError': [SKIP],
  'LanguageServerJson.ParserError': [SKIP],
  'Torque.DoubleUnderScorePrefixIllegalForIdentifiers': [SKIP],
  'Torque.Enums': [SKIP],
  'Torque.ImportNonExistentFile': [SKIP],

  # Test uses fancy signal handling. Needs investigation.
  'MemoryAllocationPermissionsTest.DoTest': [SKIP],

  # cppgc::internal::kGuardPageSize is smaller than kAppleArmPageSize.
  'PageMemoryRegionTest.PlatformUsesGuardPages': [FAIL],

  # Time tick resolution appears to be ~42 microseconds. Tests expect 1 us.
  'TimeTicks.NowResolution': [FAIL],
  'RuntimeCallStatsTest.BasicJavaScript': [SKIP],
  'RuntimeCallStatsTest.FunctionLengthGetter': [SKIP],
}],  # system == macos and arch == arm64 and not simulator_run

##############################################################################
['lite_mode or variant == jitless', {
  # TODO(v8:7777): Re-enable once wasm is supported in jitless mode.
  'ValueSerializerTestWithSharedArrayBufferClone.RoundTripWebAssemblyMemory': [SKIP],
  'ValueSerializerTestWithWasm.*': [SKIP],
}], # lite_mode or variant == jitless

##############################################################################
['system == windows and asan', {
  # BUG(893437).
  'Torque*': [SKIP],

  # Hangs on asan.
  'PageMemoryRegionDeathTest*': [SKIP],
}],  # system == windows and asan

['system == windows and arch == x64 and mode == release', {
  # BUG(992783).
  'Torque.ConditionalFields': [SKIP],
  'Torque.UsingUnderscorePrefixedIdentifierError': [SKIP],
}],  # system == windows and arch == x64 and mode == release

['tsan == True', {
  # https://crbug.com/v8/9380
  # The test is broken and needs to be fixed to use separate isolates.
  'BackingStoreTest.RacyGrowWasmMemoryInPlace': [SKIP],
}],  # tsan == True

##############################################################################
['not pointer_compression', {
  # Tests are irrelevant without pointer compression
  'DecompressionOptimizerTest.*': [SKIP],
}], # not pointer_compression

################################################################################
['variant == stress_snapshot', {
  '*': [SKIP],  # only relevant for mjsunit tests.
}],
]
