#include "human_sort.hpp"

#include <set>
#include <string>

#include <gmock/gmock.h>  // IWYU pragma: keep
#include <gtest/gtest.h>  // IWYU pragma: keep

// IWYU pragma: no_include <gtest/gtest-message.h>
// IWYU pragma: no_include <gtest/gtest-test-part.h>
// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
// IWYU pragma: no_include <gmock/gmock-matchers.h>

namespace {

using ::testing::ElementsAreArray;

TEST(AlphaNum, NumberTests) {
  // test cases for the algorithm
  EXPECT_EQ(alphanumComp("", ""), 0);
  EXPECT_LT(alphanumComp("", "a"), 0);
  EXPECT_GT(alphanumComp("a", ""), 0);
  EXPECT_EQ(alphanumComp("a", "a"), 0);
  EXPECT_LT(alphanumComp("", "9"), 0);
  EXPECT_GT(alphanumComp("9", ""), 0);
  EXPECT_EQ(alphanumComp("1", "1"), 0);
  EXPECT_LT(alphanumComp("1", "2"), 0);
  EXPECT_GT(alphanumComp("3", "2"), 0);
  EXPECT_EQ(alphanumComp("a1", "a1"), 0);
  EXPECT_LT(alphanumComp("a1", "a2"), 0);
  EXPECT_GT(alphanumComp("a2", "a1"), 0);
  EXPECT_LT(alphanumComp("a1a2", "a1a3"), 0);
  EXPECT_GT(alphanumComp("a1a2", "a1a0"), 0);
  EXPECT_GT(alphanumComp("134", "122"), 0);
  EXPECT_EQ(alphanumComp("12a3", "12a3"), 0);
  EXPECT_GT(alphanumComp("12a1", "12a0"), 0);
  EXPECT_LT(alphanumComp("12a1", "12a2"), 0);
  EXPECT_LT(alphanumComp("a", "aa"), 0);
  EXPECT_GT(alphanumComp("aaa", "aa"), 0);
  EXPECT_EQ(alphanumComp("Alpha 2", "Alpha 2"), 0);
  EXPECT_LT(alphanumComp("Alpha 2", "Alpha 2A"), 0);
  EXPECT_GT(alphanumComp("Alpha 2 B", "Alpha 2"), 0);

  std::string str("Alpha 2");
  EXPECT_EQ(alphanumComp(str, "Alpha 2"), 0);
  EXPECT_LT(alphanumComp(str, "Alpha 2A"), 0);
  EXPECT_GT(alphanumComp("Alpha 2 B", str), 0);
}

TEST(AlphaNum, LessTest) {
  std::set<std::string, AlphanumLess<std::string>> sorted{"Alpha 10",
                                                          "Alpha 2"};
  EXPECT_THAT(sorted, ElementsAreArray({"Alpha 2", "Alpha 10"}));
}
}  // namespace
