From 8866c74b04abbc2db24a46a78efc992b762632a6 Mon Sep 17 00:00:00 2001 From: Michael Aziz Date: Sun, 6 Oct 2024 19:57:35 -0700 Subject: [PATCH] Implement tests for `sycl_ext_oneapi_default_context` extension Signed-off-by: Michael Aziz --- CMakeLists.txt | 4 + .../oneapi_default_context/CMakeLists.txt | 5 ++ .../default_context.cpp | 80 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 tests/extension/oneapi_default_context/CMakeLists.txt create mode 100644 tests/extension/oneapi_default_context/default_context.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 971c6c10c..fa62b227b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,10 @@ add_cts_option(SYCL_CTS_ENABLE_EXT_ONEAPI_ENQUEUE_FUNCTIONS_TESTS "Enable extension oneAPI enqueue_functions tests" OFF FORCE_ON ${SYCL_CTS_ENABLE_EXT_ONEAPI_TESTS}) +add_cts_option(SYCL_CTS_ENABLE_EXT_ONEAPI_DEFAULT_CONTEXT_TESTS + "Enable extension oneAPI default_context tests" OFF + FORCE_ON ${SYCL_CTS_ENABLE_EXT_ONEAPI_TESTS}) + # TODO: Deprecated - remove add_cts_option(SYCL_CTS_ENABLE_VERBOSE_LOG "Enable debug-level logs (deprecated)" OFF) diff --git a/tests/extension/oneapi_default_context/CMakeLists.txt b/tests/extension/oneapi_default_context/CMakeLists.txt new file mode 100644 index 000000000..ee005a726 --- /dev/null +++ b/tests/extension/oneapi_default_context/CMakeLists.txt @@ -0,0 +1,5 @@ +if(SYCL_CTS_ENABLE_EXT_ONEAPI_DEFAULT_CONTEXT_TESTS) + file(GLOB test_cases_list *.cpp) + + add_cts_test(${test_cases_list}) +endif() diff --git a/tests/extension/oneapi_default_context/default_context.cpp b/tests/extension/oneapi_default_context/default_context.cpp new file mode 100644 index 000000000..7f83f77bb --- /dev/null +++ b/tests/extension/oneapi_default_context/default_context.cpp @@ -0,0 +1,80 @@ +/******************************************************************************* +// +// SYCL 2020 Conformance Test Suite +// +// Copyright (c) 2024 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +*******************************************************************************/ + +#include "../../common/common.h" + +namespace default_context::tests { + +#ifdef SYCL_EXT_ONEAPI_DEFAULT_CONTEXT + +static void testDefaultContext() { + sycl::platform platform{}; + sycl::context defaultContext = platform.ext_oneapi_get_default_context(); + CHECK(defaultContext.get_devices() == platform.get_devices()); +} + +static void testQueueConstructors() { + const sycl::property_list& propList = {}; + cts_async_handler asyncHandler; + const auto& deviceSelector = sycl::default_selector_v; + sycl::device syclDevice; + sycl::context syclContext; + sycl::context defaultContext = + sycl::platform{}.ext_oneapi_get_default_context(); + + // Check that a default-constructed context is not the default context. + CHECK(syclContext != defaultContext); + + // Default context constructor + CHECK(defaultContext == sycl::queue{propList}.get_context()); + CHECK(defaultContext == sycl::queue{asyncHandler, propList}.get_context()); + CHECK(defaultContext == sycl::queue{deviceSelector, propList}.get_context()); + CHECK(defaultContext == + sycl::queue{deviceSelector, asyncHandler, propList}.get_context()); + CHECK(defaultContext == sycl::queue{syclDevice, propList}.get_context()); + CHECK(defaultContext == + sycl::queue{syclDevice, asyncHandler, propList}.get_context()); + + // Non-default context constructors + CHECK(syclContext == + sycl::queue{syclContext, deviceSelector, propList}.get_context()); + CHECK(syclContext == + sycl::queue{syclContext, deviceSelector, asyncHandler, propList} + .get_context()); + CHECK(syclContext == + sycl::queue{syclContext, syclDevice, propList}.get_context()); + CHECK(syclContext == + sycl::queue{syclContext, syclDevice, asyncHandler, propList} + .get_context()); +} + +#endif + +TEST_CASE("Test case for \"Default Context\" extension", + "[oneapi_default_context") { +#ifndef SYCL_EXT_ONEAPI_DEFAULT_CONTEXT + SKIP("SYCL_EXT_ONEAPI_DEFAULT_CONTEXT is not defined"); +#else + testDefaultContext(); + testQueueConstructors(); +#endif +} + +} // namespace default_context::tests