// Copyright 2017-2020 The Verible Authors.
//
// 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 "common/util/with_reason.h"

#include "gmock/gmock.h"
#include "gtest/gtest.h"

namespace verible {
namespace {

// Example of a priority-ordered function.
static WithReason<const char*> FizzBuzzer(int i) {
  if (i % 3 == 0) {
    if (i % 5 == 0) {
      return {"fizzbuzz", "value is divisible by 3 and 5."};
    }
    return {"fizz", "value is only divisible by 3."};
  }

  if (i % 5 == 0) return {"buzz", "value is only divisible by 5."};

  return {".", "value is neither divisible by 3 nor 5."};
}

TEST(WithReason, Fizz) {
  const auto result = FizzBuzzer(6);
  EXPECT_EQ(result.value, "fizz");
  EXPECT_EQ(result.reason, "value is only divisible by 3.");
}

TEST(WithReason, Buzz) {
  const auto result = FizzBuzzer(10);
  EXPECT_EQ(result.value, "buzz");
  EXPECT_EQ(result.reason, "value is only divisible by 5.");
}

TEST(WithReason, Neither) {
  const auto result = FizzBuzzer(16);
  EXPECT_EQ(result.value, ".");
  EXPECT_EQ(result.reason, "value is neither divisible by 3 nor 5.");
}

TEST(WithReason, Both) {
  const auto result = FizzBuzzer(30);
  EXPECT_EQ(result.value, "fizzbuzz");
  EXPECT_EQ(result.reason, "value is divisible by 3 and 5.");
}

}  // namespace
}  // namespace verible
