// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <fuchsia/ui/gfx/cpp/fidl.h>
#include <lib/ui/gfx/cpp/math.h>

#include "third_party/googletest/googletest/include/gtest/gtest.h"

namespace {

using fuchsia::ui::gfx::vec2;

TEST(MathTest, Vec2Length) { EXPECT_EQ(scenic::Length({3, 4}), 5); }

TEST(MathTest, Vec2Distance2) {
  EXPECT_EQ(scenic::Distance2({-1, -2}, {3, 4}), 52);
}

TEST(MathTest, Vec2Sub) {
  EXPECT_EQ(vec2({86, 75}) - vec2({30, -9}), vec2({56, 84}));
}

TEST(MathTest, Vec2AddAssign) {
  vec2 v{4, 2};
  // For assignment operators, also make sure the return is a self-ref.
  (v += {-5, 4}).x += .1f;
  EXPECT_EQ(v, vec2({-.9f, 6}));
}

TEST(MathTest, Vec2ScalarMul) {
  EXPECT_EQ(vec2({-3, .5f}) * 3, vec2({-9, 1.5f}));
}

TEST(MathTest, Vec2ScalarDivAssign) {
  vec2 v{5, -1};
  (v /= 2).x += .1f;
  EXPECT_EQ(v, vec2({2.6f, -.5f}));
}

TEST(MathTest, Vec2ScalarDiv) {
  EXPECT_EQ(vec2({-3, .5f}) / 2, vec2({-1.5f, .25f}));
}

}  // namespace
