/* * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/compiler_interface/intermediate_representations.h" #include "shared/test/common/test_macros/test.h" TEST(HasSameMagic, WhenMagicIsMatchedThenReturnTrue) { EXPECT_TRUE(NEO::hasSameMagic("abcd", ArrayRef("abcdefg").toArrayRef())); } TEST(HasSameMagic, WhenBinaryIsNullptrThenReturnFalse) { EXPECT_FALSE(NEO::hasSameMagic("abcd", {})); } TEST(HasSameMagic, WhenBinaryIsShorterThanExpectedMagicThenReturnFalse) { EXPECT_FALSE(NEO::hasSameMagic("abcd", ArrayRef("ab").toArrayRef())); } TEST(HasSameMagic, WhenMagicIsNotMatchedThenReturnFalse) { EXPECT_FALSE(NEO::hasSameMagic("abcd", ArrayRef("abcefg").toArrayRef())); } static constexpr uint8_t llvmBinary[] = "BC\xc0\xde "; TEST(IsLlvmBitcode, WhenLlvmMagicWasFoundThenBinaryIsValidLLvm) { EXPECT_TRUE(NEO::isLlvmBitcode(llvmBinary)); } TEST(IsLlvmBitcode, WhenBinaryIsNullptrThenBinaryIsNotValidLLvm) { EXPECT_FALSE(NEO::isLlvmBitcode(ArrayRef())); } TEST(IsLlvmBitcode, WhenBinaryIsShorterThanLllvMagicThenBinaryIsNotValidLLvm) { EXPECT_FALSE(NEO::isLlvmBitcode(ArrayRef(llvmBinary, 2))); } TEST(IsLlvmBitcode, WhenBinaryDoesNotContainLllvMagicThenBinaryIsNotValidLLvm) { const uint8_t notLlvmBinary[] = "ABCDEFGHIJKLMNO"; EXPECT_FALSE(NEO::isLlvmBitcode(notLlvmBinary)); } static constexpr uint32_t spirv[16] = {0x03022307}; static constexpr uint32_t spirvInvEndianes[16] = {0x07230203}; TEST(IsSpirVBitcode, WhenSpirvMagicWasFoundThenBinaryIsValidSpirv) { EXPECT_TRUE(NEO::isSpirVBitcode(ArrayRef(reinterpret_cast(&spirv), sizeof(spirv)))); EXPECT_TRUE(NEO::isSpirVBitcode(ArrayRef(reinterpret_cast(&spirvInvEndianes), sizeof(spirvInvEndianes)))); } TEST(IsSpirVBitcode, WhenBinaryIsNullptrThenBinaryIsNotValidSpirv) { EXPECT_FALSE(NEO::isSpirVBitcode(ArrayRef())); } TEST(IsSpirVBitcode, WhenBinaryIsShorterThanLllvMagicThenBinaryIsNotValidSpirv) { EXPECT_FALSE(NEO::isSpirVBitcode(ArrayRef(reinterpret_cast(&spirvInvEndianes), 2))); } TEST(IsSpirVBitcode, WhenBinaryDoesNotContainLllvMagicThenBinaryIsNotValidSpirv) { const uint8_t notSpirvBinary[] = "ABCDEFGHIJKLMNO"; EXPECT_FALSE(NEO::isSpirVBitcode(notSpirvBinary)); }