* Copyright (c) 2023 Huawei Device Co., Ltd.
* 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 "driver_options.h"
#include "triple.h"
#include "gtest/gtest.h"
using namespace maple;
TEST(utTriple, triple1)
{
Triple::GetTriple().Init("aarch64");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
Triple::GetTriple().Init("aarch64_le");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
Triple::GetTriple().Init("aarch64_be");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
Triple::GetTriple().Init("aarch64_be-ilp32");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNUILP32);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
Triple::GetTriple().Init("aarch64_be-gnuilp32");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNUILP32);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
Triple::GetTriple().Init("aarch64_be-linux-gnuilp32");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNUILP32);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
Triple::GetTriple().Init();
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
Triple::GetTriple().Init("incorect-triple");
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
}
TEST(utTriple, triple2)
{
const char *argv[] = {"maple",
"-be", "--ilp32", nullptr};
int argc = (sizeof(argv) / sizeof(argv[0])) - 1;
cl::CommandLine::GetCommandLine().Clear();
auto err = cl::CommandLine::GetCommandLine().Parse(argc, (char **)argv);
ASSERT_EQ(err, cl::RetCode::noError);
Triple::GetTriple().Init();
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNUILP32);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
const char *argv2[] = {"maple",
nullptr};
argc = (sizeof(argv) / sizeof(argv[0])) - 1;
cl::CommandLine::GetCommandLine().Clear();
err = cl::CommandLine::GetCommandLine().Parse(argc, (char **)argv2);
ASSERT_EQ(err, cl::RetCode::noError);
Triple::GetTriple().Init();
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
const char *argv3[] = {"maple",
"--target=aarch64_be-gnuilp32", nullptr};
argc = (sizeof(argv) / sizeof(argv[0])) - 1;
cl::CommandLine::GetCommandLine().Clear();
err = cl::CommandLine::GetCommandLine().Parse(argc, (char **)argv3);
ASSERT_EQ(err, cl::RetCode::noError);
Triple::GetTriple().Init(opts::target);
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNUILP32);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64_be);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), true);
}
TEST(utTriple, triple3)
{
const char *argv[] = {"maple",
"-be", "--ilp32", "--target=aarch64-gnu", nullptr};
int argc = (sizeof(argv) / sizeof(argv[0])) - 1;
cl::CommandLine::GetCommandLine().Clear();
auto err = cl::CommandLine::GetCommandLine().Parse(argc, (char **)argv);
ASSERT_EQ(err, cl::RetCode::noError);
Triple::GetTriple().Init(opts::target);
ASSERT_EQ(Triple::GetTriple().GetEnvironment(), Triple::EnvironmentType::GNU);
ASSERT_EQ(Triple::GetTriple().GetArch(), Triple::ArchType::aarch64);
ASSERT_EQ(Triple::GetTriple().IsBigEndian(), false);
}