#include "clang/Basic/Builtins.h"
#include "gtest/gtest.h"

using namespace llvm;

// These tests are to Check whether CodeGen::TargetFeatures works correctly.
TEST(CheckTargetFeaturesTest, checkBuiltinFeatures) {
  auto doCheck = [](StringRef BuiltinFeatures, StringRef FuncFeatures) {
    SmallVector<StringRef, 1> Features;
    FuncFeatures.split(Features, ',');
    StringMap<bool> SM;
    for (StringRef F : Features)
      SM.insert(std::make_pair(F, true));
    return clang::Builtin::evaluateRequiredTargetFeatures(BuiltinFeatures, SM);
  };
  // Make sure the basic function ',' and '|' works correctly
  ASSERT_FALSE(doCheck("A,B,C,D", "A"));
  ASSERT_TRUE(doCheck("A,B,C,D", "A,B,C,D"));
  ASSERT_TRUE(doCheck("A|B", "A"));
  ASSERT_FALSE(doCheck("A|B", "C"));

  // Make sure the ',' has higher priority.
  ASSERT_TRUE(doCheck("A|B,C|D", "A"));

  // Make sure the parentheses do change the priority of '|'.
  ASSERT_FALSE(doCheck("(A|B),(C|D)", "A"));
  ASSERT_TRUE(doCheck("(A|B),(C|D)", "A,C"));

  // Make sure the combination in parentheses works correctly.
  ASSERT_FALSE(doCheck("(A,B|C),D", "A,C"));
  ASSERT_FALSE(doCheck("(A,B|C),D", "A,D"));
  ASSERT_TRUE(doCheck("(A,B|C),D", "C,D"));
  ASSERT_TRUE(doCheck("(A,B|C),D", "A,B,D"));

  // Make sure nested parentheses works correctly.
  ASSERT_FALSE(doCheck("(A,(B|C)),D", "C,D"));
  ASSERT_TRUE(doCheck("(A,(B|C)),D", "A,C,D"));
}
