// Copyright 2024 Google LLC
//
// 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 <flashupdate/version.hpp>

#include <gtest/gtest.h>

namespace flashupdate
{

TEST(VersionTest, GreaterOrEqual)
{
    std::string versionStr = "10.10.10.10";
    version::Version version(versionStr);
    version::Version expectedVersion(versionStr);

    // 9.10.10.10
    expectedVersion.major = 9;
    EXPECT_GE(version, expectedVersion);
    EXPECT_GT(version, expectedVersion);

    // 10.9.10.10
    expectedVersion.major = 10;
    expectedVersion.minor = 9;
    EXPECT_GE(version, expectedVersion);
    EXPECT_GT(version, expectedVersion);

    // 10.10.8.10
    expectedVersion.minor = 10;
    expectedVersion.point = 8;
    EXPECT_GE(version, expectedVersion);
    EXPECT_GT(version, expectedVersion);

    // 10.10.10.7
    expectedVersion.point = 10;
    expectedVersion.subpoint = 7;
    EXPECT_GE(version, expectedVersion);
    EXPECT_GT(version, expectedVersion);

    // 10.10.10.10
    expectedVersion.subpoint = 10;
    EXPECT_GE(version, expectedVersion);
    EXPECT_EQ(version, expectedVersion);
}

TEST(VersionTest, LessOrEqual)
{
    std::string versionStr = "10.10.10.10";
    version::Version version(versionStr);
    version::Version expectedVersion(versionStr);

    // 11.10.10.10
    expectedVersion.major = 11;
    EXPECT_LE(version, expectedVersion);
    EXPECT_LT(version, expectedVersion);

    // 10.12.10.10
    expectedVersion.major = 10;
    expectedVersion.minor = 12;
    EXPECT_LE(version, expectedVersion);
    EXPECT_LT(version, expectedVersion);

    // 10.10.13.10
    expectedVersion.minor = 10;
    expectedVersion.point = 13;
    EXPECT_LE(version, expectedVersion);
    EXPECT_LT(version, expectedVersion);

    // 10.10.10.14
    expectedVersion.point = 10;
    expectedVersion.subpoint = 14;
    EXPECT_LE(version, expectedVersion);
    EXPECT_LT(version, expectedVersion);

    // 10.10.10.10
    expectedVersion.subpoint = 10;
    EXPECT_LE(version, expectedVersion);
    EXPECT_EQ(version, expectedVersion);
}
} // namespace flashupdate
