#include "aos/util/options.h"

#include <memory>

#include "gtest/gtest.h"

namespace aos::testing {

class OptionsTest : public ::testing::Test {
 public:
  static constexpr Options<OptionsTest>::Option kOne{1}, kTwo{2}, kThree{4},
      kFour{8};
};

constexpr Options<OptionsTest>::Option OptionsTest::kOne, OptionsTest::kTwo,
    OptionsTest::kThree, OptionsTest::kFour;

TEST_F(OptionsTest, Basic) {
  const Options<OptionsTest> one_three = kOne | kThree;
  EXPECT_TRUE(one_three & kOne);
  EXPECT_FALSE(one_three & kTwo);
  EXPECT_TRUE(one_three & kThree);
}

TEST_F(OptionsTest, NoOthersSet) {
  const Options<OptionsTest> one_three = kOne | kThree;
  EXPECT_TRUE(one_three.NoOthersSet(one_three));
  EXPECT_TRUE(one_three.NoOthersSet(kOne | kTwo | kThree));
  EXPECT_TRUE(one_three.NoOthersSet(kOne | kThree | kFour));
  EXPECT_TRUE(one_three.NoOthersSet(kOne | kTwo | kThree | kFour));
  EXPECT_FALSE(one_three.NoOthersSet(kOne));
  EXPECT_FALSE(one_three.NoOthersSet(kThree));
  EXPECT_FALSE(one_three.NoOthersSet(kTwo | kFour));
}

TEST_F(OptionsTest, ExactlyOneSet) {
  const Options<OptionsTest> one_three = kOne | kThree;
  EXPECT_TRUE(one_three.ExactlyOneSet(kOne | kTwo));
  EXPECT_FALSE(one_three.ExactlyOneSet(one_three));
  EXPECT_TRUE(one_three.ExactlyOneSet(kTwo | kThree | kFour));
  EXPECT_FALSE(one_three.ExactlyOneSet(kOne | kTwo | kThree | kFour));
}

TEST_F(OptionsTest, AllSet) {
  const Options<OptionsTest> one_three = kOne | kThree;
  EXPECT_TRUE(one_three.AllSet(one_three));
  EXPECT_TRUE(one_three.AllSet(kOne));
  EXPECT_FALSE(one_three.AllSet(kTwo));
  EXPECT_TRUE(one_three.AllSet(kThree));
  EXPECT_FALSE(one_three.AllSet(kFour));
  EXPECT_FALSE(one_three.AllSet(kOne | kTwo | kFour));
  EXPECT_FALSE(one_three.AllSet(kTwo | kThree | kFour));
  EXPECT_FALSE(one_three.AllSet(kOne | kTwo | kThree | kFour));
}

}  // namespace aos::testing
