/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * 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 "cobalt/layout/layout_unit.h"

#include <cstring>
#include <functional>

#include "base/logging.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace layout {

TEST(LayoutUnitTest, DefaultConstructorOrDestructorInitializesToZero) {
  LayoutUnit value_a(5);
  value_a.~LayoutUnit();
  LayoutUnit* value_b = new (&value_a) LayoutUnit();
  EXPECT_FLOAT_EQ(value_b->toFloat(), 0.0f);
}

TEST(LayoutUnitTest, DefaultConstructorInitializesToZero) {
  union {
    char* bytes;
    LayoutUnit* value;
  } value_data;
  char bytes[sizeof(LayoutUnit)];
  value_data.bytes = bytes;
  // Initialize the variable data with nonzero bytes. Test for each nonzero byte
  // value.
  for (int byte_value = 1; byte_value < 256; ++byte_value) {
    memset(value_data.bytes, byte_value, sizeof(LayoutUnit));
    LayoutUnit* value = new (value_data.bytes) LayoutUnit();
    EXPECT_FLOAT_EQ(value->toFloat(), 0.0f);
    value_data.value->~LayoutUnit();
  }
}

TEST(LayoutUnitTest, IntConstructor) {
  LayoutUnit value(5);
  EXPECT_FLOAT_EQ(value.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, FloatConstructor) {
  LayoutUnit value(5.0f);
  EXPECT_FLOAT_EQ(value.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, CopyConstructor) {
  LayoutUnit value_a(5.0f);
  LayoutUnit value_b(value_a);
  EXPECT_FLOAT_EQ(value_b.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, Swap) {
  LayoutUnit value_a(5.0f);
  LayoutUnit value_b(35.0f);
  value_a.swap(value_b);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 35.0f);
  EXPECT_FLOAT_EQ(value_b.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, Assignment) {
  LayoutUnit value_a(5.0f);
  LayoutUnit value_b;
  LayoutUnit value_c;
  value_c = value_b = value_a;
  EXPECT_FLOAT_EQ(value_b.toFloat(), 5.0f);
  EXPECT_FLOAT_EQ(value_c.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, EqualOperator) {
  EXPECT_TRUE(LayoutUnit(-8192) == LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-8192) == LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-8192) == LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-8192) == LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-8192) == LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(-1) == LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-1) == LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-1) == LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-1) == LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-1) == LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(0) == LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(0) == LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(0) == LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(0) == LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(0) == LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(1) == LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(1) == LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(1) == LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(1) == LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(1) == LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(8192) == LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(8192) == LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(8192) == LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(8192) == LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(8192) == LayoutUnit(8192));
}

TEST(LayoutUnitTest, NotEqualOperator) {
  EXPECT_FALSE(LayoutUnit(-8192) != LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-8192) != LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-8192) != LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-8192) != LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-8192) != LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(-1) != LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-1) != LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-1) != LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-1) != LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-1) != LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(0) != LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(0) != LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(0) != LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(0) != LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(0) != LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(1) != LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(1) != LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(1) != LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(1) != LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(1) != LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(8192) != LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(8192) != LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(8192) != LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(8192) != LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(8192) != LayoutUnit(8192));
}

TEST(LayoutUnitTest, GreaterEqualOperator) {
  EXPECT_TRUE(LayoutUnit(-8192) >= LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-8192) >= LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-8192) >= LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-8192) >= LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-8192) >= LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(-1) >= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-1) >= LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-1) >= LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-1) >= LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-1) >= LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(0) >= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(0) >= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(0) >= LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(0) >= LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(0) >= LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(1) >= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(1) >= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(1) >= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(1) >= LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(1) >= LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(8192) >= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(8192) >= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(8192) >= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(8192) >= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(8192) >= LayoutUnit(8192));
}

TEST(LayoutUnitTest, LessEqualOperator) {
  EXPECT_TRUE(LayoutUnit(-8192) <= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-8192) <= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-8192) <= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-8192) <= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-8192) <= LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(-1) <= LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-1) <= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-1) <= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-1) <= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-1) <= LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(0) <= LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(0) <= LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(0) <= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(0) <= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(0) <= LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(1) <= LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(1) <= LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(1) <= LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(1) <= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(1) <= LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(8192) <= LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(8192) <= LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(8192) <= LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(8192) <= LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(8192) <= LayoutUnit(8192));
}

TEST(LayoutUnitTest, GreaterOperator) {
  EXPECT_FALSE(LayoutUnit(-8192) > LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-8192) > LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-8192) > LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-8192) > LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-8192) > LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(-1) > LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-1) > LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(-1) > LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(-1) > LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(-1) > LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(0) > LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(0) > LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(0) > LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(0) > LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(0) > LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(1) > LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(1) > LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(1) > LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(1) > LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(1) > LayoutUnit(8192));

  EXPECT_TRUE(LayoutUnit(8192) > LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(8192) > LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(8192) > LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(8192) > LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(8192) > LayoutUnit(8192));
}

TEST(LayoutUnitTest, LessOperator) {
  EXPECT_FALSE(LayoutUnit(-8192) < LayoutUnit(-8192));
  EXPECT_TRUE(LayoutUnit(-8192) < LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-8192) < LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-8192) < LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-8192) < LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(-1) < LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(-1) < LayoutUnit(-1));
  EXPECT_TRUE(LayoutUnit(-1) < LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(-1) < LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(-1) < LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(0) < LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(0) < LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(0) < LayoutUnit(0));
  EXPECT_TRUE(LayoutUnit(0) < LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(0) < LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(1) < LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(1) < LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(1) < LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(1) < LayoutUnit(1));
  EXPECT_TRUE(LayoutUnit(1) < LayoutUnit(8192));

  EXPECT_FALSE(LayoutUnit(8192) < LayoutUnit(-8192));
  EXPECT_FALSE(LayoutUnit(8192) < LayoutUnit(-1));
  EXPECT_FALSE(LayoutUnit(8192) < LayoutUnit(0));
  EXPECT_FALSE(LayoutUnit(8192) < LayoutUnit(1));
  EXPECT_FALSE(LayoutUnit(8192) < LayoutUnit(8192));
}

TEST(LayoutUnitTest, PlusOperator) {
  LayoutUnit value_a1(-5.0f);
  LayoutUnit value_b1(5.0f);
  LayoutUnit value_a2 = +value_a1;
  LayoutUnit value_b2 = +value_b1;

  EXPECT_FLOAT_EQ(value_a1.toFloat(), -5.0f);
  EXPECT_FLOAT_EQ(value_b1.toFloat(), 5.0f);
  EXPECT_FLOAT_EQ(value_a2.toFloat(), -5.0f);
  EXPECT_FLOAT_EQ(value_b2.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, MinusOperator) {
  LayoutUnit value_a1(-5.0f);
  LayoutUnit value_b1(5.0f);
  LayoutUnit value_a2 = -value_a1;
  LayoutUnit value_b2 = -value_b1;

  EXPECT_FLOAT_EQ(value_a1.toFloat(), -5.0f);
  EXPECT_FLOAT_EQ(value_b1.toFloat(), 5.0f);
  EXPECT_FLOAT_EQ(value_a2.toFloat(), 5.0f);
  EXPECT_FLOAT_EQ(value_b2.toFloat(), -5.0f);
}

TEST(LayoutUnitTest, AdditionAssignmentOperator) {
  LayoutUnit value_a(5.0f);
  LayoutUnit value_b(10.0f);
  value_a += value_b;

  EXPECT_FLOAT_EQ(value_b.toFloat(), 10.0f);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 15.0f);
}

TEST(LayoutUnitTest, AdditionOperator) {
  EXPECT_EQ(LayoutUnit(-8192) + LayoutUnit(-8192), LayoutUnit(-8192 + -8192));
  EXPECT_EQ(LayoutUnit(-8192) + LayoutUnit(-1), LayoutUnit(-8192 + -1));
  EXPECT_EQ(LayoutUnit(-8192) + LayoutUnit(0), LayoutUnit(-8192 + 0));
  EXPECT_EQ(LayoutUnit(-8192) + LayoutUnit(1), LayoutUnit(-8192 + 1));
  EXPECT_EQ(LayoutUnit(-8192) + LayoutUnit(8192), LayoutUnit(-8192 + 8192));

  EXPECT_EQ(LayoutUnit(-1) + LayoutUnit(-8192), LayoutUnit(-1 + -8192));
  EXPECT_EQ(LayoutUnit(-1) + LayoutUnit(-1), LayoutUnit(-1 + -1));
  EXPECT_EQ(LayoutUnit(-1) + LayoutUnit(0), LayoutUnit(-1 + 0));
  EXPECT_EQ(LayoutUnit(-1) + LayoutUnit(1), LayoutUnit(-1 + 1));
  EXPECT_EQ(LayoutUnit(-1) + LayoutUnit(8192), LayoutUnit(-1 + 8192));

  EXPECT_EQ(LayoutUnit(0) + LayoutUnit(-8192), LayoutUnit(0 + -8192));
  EXPECT_EQ(LayoutUnit(0) + LayoutUnit(-1), LayoutUnit(0 + -1));
  EXPECT_EQ(LayoutUnit(0) + LayoutUnit(0), LayoutUnit(0 + 0));
  EXPECT_EQ(LayoutUnit(0) + LayoutUnit(1), LayoutUnit(0 + 1));
  EXPECT_EQ(LayoutUnit(0) + LayoutUnit(8192), LayoutUnit(0 + 8192));

  EXPECT_EQ(LayoutUnit(1) + LayoutUnit(-8192), LayoutUnit(1 + -8192));
  EXPECT_EQ(LayoutUnit(1) + LayoutUnit(-1), LayoutUnit(1 + -1));
  EXPECT_EQ(LayoutUnit(1) + LayoutUnit(0), LayoutUnit(1 + 0));
  EXPECT_EQ(LayoutUnit(1) + LayoutUnit(1), LayoutUnit(1 + 1));
  EXPECT_EQ(LayoutUnit(1) + LayoutUnit(8192), LayoutUnit(1 + 8192));

  EXPECT_EQ(LayoutUnit(8192) + LayoutUnit(-8192), LayoutUnit(8192 + -8192));
  EXPECT_EQ(LayoutUnit(8192) + LayoutUnit(-1), LayoutUnit(8192 + -1));
  EXPECT_EQ(LayoutUnit(8192) + LayoutUnit(0), LayoutUnit(8192 + 0));
  EXPECT_EQ(LayoutUnit(8192) + LayoutUnit(1), LayoutUnit(8192 + 1));
  EXPECT_EQ(LayoutUnit(8192) + LayoutUnit(8192), LayoutUnit(8192 + 8192));
}

TEST(LayoutUnitTest, SubtractionAssignmentOperator) {
  LayoutUnit value_a(5.0f);
  LayoutUnit value_b(10.0f);
  value_a -= value_b;

  EXPECT_FLOAT_EQ(value_b.toFloat(), 10.0f);
  EXPECT_FLOAT_EQ(value_a.toFloat(), -5.0f);
}

TEST(LayoutUnitTest, SubtractionOperator) {
  EXPECT_EQ(LayoutUnit(-8192) - LayoutUnit(-8192), LayoutUnit(-8192 - -8192));
  EXPECT_EQ(LayoutUnit(-8192) - LayoutUnit(-1), LayoutUnit(-8192 - -1));
  EXPECT_EQ(LayoutUnit(-8192) - LayoutUnit(0), LayoutUnit(-8192 - 0));
  EXPECT_EQ(LayoutUnit(-8192) - LayoutUnit(1), LayoutUnit(-8192 - 1));
  EXPECT_EQ(LayoutUnit(-8192) - LayoutUnit(8192), LayoutUnit(-8192 - 8192));

  EXPECT_EQ(LayoutUnit(-1) - LayoutUnit(-8192), LayoutUnit(-1 - -8192));
  EXPECT_EQ(LayoutUnit(-1) - LayoutUnit(-1), LayoutUnit(-1 - -1));
  EXPECT_EQ(LayoutUnit(-1) - LayoutUnit(0), LayoutUnit(-1 - 0));
  EXPECT_EQ(LayoutUnit(-1) - LayoutUnit(1), LayoutUnit(-1 - 1));
  EXPECT_EQ(LayoutUnit(-1) - LayoutUnit(8192), LayoutUnit(-1 - 8192));

  EXPECT_EQ(LayoutUnit(0) - LayoutUnit(-8192), LayoutUnit(0 - -8192));
  EXPECT_EQ(LayoutUnit(0) - LayoutUnit(-1), LayoutUnit(0 - -1));
  EXPECT_EQ(LayoutUnit(0) - LayoutUnit(0), LayoutUnit(0 - 0));
  EXPECT_EQ(LayoutUnit(0) - LayoutUnit(1), LayoutUnit(0 - 1));
  EXPECT_EQ(LayoutUnit(0) - LayoutUnit(8192), LayoutUnit(0 - 8192));

  EXPECT_EQ(LayoutUnit(1) - LayoutUnit(-8192), LayoutUnit(1 - -8192));
  EXPECT_EQ(LayoutUnit(1) - LayoutUnit(-1), LayoutUnit(1 - -1));
  EXPECT_EQ(LayoutUnit(1) - LayoutUnit(0), LayoutUnit(1 - 0));
  EXPECT_EQ(LayoutUnit(1) - LayoutUnit(1), LayoutUnit(1 - 1));
  EXPECT_EQ(LayoutUnit(1) - LayoutUnit(8192), LayoutUnit(1 - 8192));

  EXPECT_EQ(LayoutUnit(8192) - LayoutUnit(-8192), LayoutUnit(8192 - -8192));
  EXPECT_EQ(LayoutUnit(8192) - LayoutUnit(-1), LayoutUnit(8192 - -1));
  EXPECT_EQ(LayoutUnit(8192) - LayoutUnit(0), LayoutUnit(8192 - 0));
  EXPECT_EQ(LayoutUnit(8192) - LayoutUnit(1), LayoutUnit(8192 - 1));
  EXPECT_EQ(LayoutUnit(8192) - LayoutUnit(8192), LayoutUnit(8192 - 8192));
}

// Integer scaling math operators.

TEST(LayoutUnitTest, IntegerMultiplicationAssignmentOperator) {
  LayoutUnit value_a(5.0f);
  int value_b = 10;
  value_a *= value_b;

  EXPECT_EQ(value_b, 10);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 50.0f);
}

TEST(LayoutUnitTest, IntegerMultiplicationOperator) {
  EXPECT_EQ(LayoutUnit(-128) * -128, LayoutUnit(-128 * -128));
  EXPECT_EQ(LayoutUnit(-128) * -8, LayoutUnit(-128 * -8));
  EXPECT_EQ(LayoutUnit(-128) * 0, LayoutUnit(-128 * 0));
  EXPECT_EQ(LayoutUnit(-128) * 8, LayoutUnit(-128 * 8));
  EXPECT_EQ(LayoutUnit(-128) * 128, LayoutUnit(-128 * 128));

  EXPECT_EQ(LayoutUnit(-8) * -128, LayoutUnit(-8 * -128));
  EXPECT_EQ(LayoutUnit(-8) * -8, LayoutUnit(-8 * -8));
  EXPECT_EQ(LayoutUnit(-8) * 0, LayoutUnit(-8 * 0));
  EXPECT_EQ(LayoutUnit(-8) * 8, LayoutUnit(-8 * 8));
  EXPECT_EQ(LayoutUnit(-8) * 128, LayoutUnit(-8 * 128));

  EXPECT_EQ(LayoutUnit(0) * -128, LayoutUnit(0 * -128));
  EXPECT_EQ(LayoutUnit(0) * -8, LayoutUnit(0 * -8));
  EXPECT_EQ(LayoutUnit(0) * 0, LayoutUnit(0 * 0));
  EXPECT_EQ(LayoutUnit(0) * 8, LayoutUnit(0 * 8));
  EXPECT_EQ(LayoutUnit(0) * 128, LayoutUnit(0 * 128));

  EXPECT_EQ(LayoutUnit(8) * -128, LayoutUnit(8 * -128));
  EXPECT_EQ(LayoutUnit(8) * -8, LayoutUnit(8 * -8));
  EXPECT_EQ(LayoutUnit(8) * 0, LayoutUnit(8 * 0));
  EXPECT_EQ(LayoutUnit(8) * 8, LayoutUnit(8 * 8));
  EXPECT_EQ(LayoutUnit(8) * 128, LayoutUnit(8 * 128));

  EXPECT_EQ(LayoutUnit(128) * -128, LayoutUnit(128 * -128));
  EXPECT_EQ(LayoutUnit(128) * -8, LayoutUnit(128 * -8));
  EXPECT_EQ(LayoutUnit(128) * 0, LayoutUnit(128 * 0));
  EXPECT_EQ(LayoutUnit(128) * 8, LayoutUnit(128 * 8));
  EXPECT_EQ(LayoutUnit(128) * 128, LayoutUnit(128 * 128));

  EXPECT_EQ(-128 * LayoutUnit(-128), LayoutUnit(-128 * -128));
  EXPECT_EQ(-128 * LayoutUnit(-8), LayoutUnit(-128 * -8));
  EXPECT_EQ(-128 * LayoutUnit(0), LayoutUnit(-128 * 0));
  EXPECT_EQ(-128 * LayoutUnit(8), LayoutUnit(-128 * 8));
  EXPECT_EQ(-128 * LayoutUnit(128), LayoutUnit(-128 * 128));

  EXPECT_EQ(-8 * LayoutUnit(-128), LayoutUnit(-8 * -128));
  EXPECT_EQ(-8 * LayoutUnit(-8), LayoutUnit(-8 * -8));
  EXPECT_EQ(-8 * LayoutUnit(0), LayoutUnit(-8 * 0));
  EXPECT_EQ(-8 * LayoutUnit(8), LayoutUnit(-8 * 8));
  EXPECT_EQ(-8 * LayoutUnit(128), LayoutUnit(-8 * 128));

  EXPECT_EQ(0 * LayoutUnit(-128), LayoutUnit(0 * -128));
  EXPECT_EQ(0 * LayoutUnit(-8), LayoutUnit(0 * -8));
  EXPECT_EQ(0 * LayoutUnit(0), LayoutUnit(0 * 0));
  EXPECT_EQ(0 * LayoutUnit(8), LayoutUnit(0 * 8));
  EXPECT_EQ(0 * LayoutUnit(128), LayoutUnit(0 * 128));

  EXPECT_EQ(8 * LayoutUnit(-128), LayoutUnit(8 * -128));
  EXPECT_EQ(8 * LayoutUnit(-8), LayoutUnit(8 * -8));
  EXPECT_EQ(8 * LayoutUnit(0), LayoutUnit(8 * 0));
  EXPECT_EQ(8 * LayoutUnit(8), LayoutUnit(8 * 8));
  EXPECT_EQ(8 * LayoutUnit(128), LayoutUnit(8 * 128));

  EXPECT_EQ(128 * LayoutUnit(-128), LayoutUnit(128 * -128));
  EXPECT_EQ(128 * LayoutUnit(-8), LayoutUnit(128 * -8));
  EXPECT_EQ(128 * LayoutUnit(0), LayoutUnit(128 * 0));
  EXPECT_EQ(128 * LayoutUnit(8), LayoutUnit(128 * 8));
  EXPECT_EQ(128 * LayoutUnit(128), LayoutUnit(128 * 128));
}

TEST(LayoutUnitTest, IntegerDivisionAssignmentOperator) {
  LayoutUnit value_a(50.0f);
  int value_b = 10;
  value_a /= value_b;

  EXPECT_EQ(value_b, 10);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, IntegerDivisionOperator) {
  EXPECT_EQ(LayoutUnit(-64) / -64, LayoutUnit(-64.0f / -64));
  EXPECT_EQ(LayoutUnit(-64) / -4, LayoutUnit(-64.0f / -4));
  EXPECT_EQ(LayoutUnit(-64) / 1, LayoutUnit(-64.0f / 1));
  EXPECT_EQ(LayoutUnit(-64) / 4, LayoutUnit(-64.0f / 4));
  EXPECT_EQ(LayoutUnit(-64) / 64, LayoutUnit(-64.0f / 64));

  EXPECT_EQ(LayoutUnit(-4) / -64, LayoutUnit(-4.0f / -64));
  EXPECT_EQ(LayoutUnit(-4) / -4, LayoutUnit(-4.0f / -4));
  EXPECT_EQ(LayoutUnit(-4) / 1, LayoutUnit(-4.0f / 1));
  EXPECT_EQ(LayoutUnit(-4) / 4, LayoutUnit(-4.0f / 4));
  EXPECT_EQ(LayoutUnit(-4) / 64, LayoutUnit(-4.0f / 64));

  EXPECT_EQ(LayoutUnit(1) / -64, LayoutUnit(1.0f / -64));
  EXPECT_EQ(LayoutUnit(1) / -4, LayoutUnit(1.0f / -4));
  EXPECT_EQ(LayoutUnit(1) / 1, LayoutUnit(1.0f / 1));
  EXPECT_EQ(LayoutUnit(1) / 4, LayoutUnit(1.0f / 4));
  EXPECT_EQ(LayoutUnit(1) / 64, LayoutUnit(1.0f / 64));

  EXPECT_EQ(LayoutUnit(4) / -64, LayoutUnit(4.0f / -64));
  EXPECT_EQ(LayoutUnit(4) / -4, LayoutUnit(4.0f / -4));
  EXPECT_EQ(LayoutUnit(4) / 1, LayoutUnit(4.0f / 1));
  EXPECT_EQ(LayoutUnit(4) / 4, LayoutUnit(4.0f / 4));
  EXPECT_EQ(LayoutUnit(4) / 64, LayoutUnit(4.0f / 64));

  EXPECT_EQ(LayoutUnit(64) / -64, LayoutUnit(64.0f / -64));
  EXPECT_EQ(LayoutUnit(64) / -4, LayoutUnit(64.0f / -4));
  EXPECT_EQ(LayoutUnit(64) / 1, LayoutUnit(64.0f / 1));
  EXPECT_EQ(LayoutUnit(64) / 4, LayoutUnit(64.0f / 4));
  EXPECT_EQ(LayoutUnit(64) / 64, LayoutUnit(64.0f / 64));
}

// Floating point scaling math operators.

TEST(LayoutUnitTest, FloatingPointMultiplicationAssignmentOperator) {
  LayoutUnit value_a(5.0f);
  float value_b = 10.0f;
  value_a *= value_b;

  EXPECT_FLOAT_EQ(value_b, 10.0f);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 50.0f);
}

TEST(LayoutUnitTest, FloatingPointMultiplicationOperator) {
  EXPECT_EQ(LayoutUnit(-128) * -128.0f, LayoutUnit(-128 * -128));
  EXPECT_EQ(LayoutUnit(-128) * -8.0f, LayoutUnit(-128 * -8));
  EXPECT_EQ(LayoutUnit(-128) * 0.0f, LayoutUnit(-128 * 0));
  EXPECT_EQ(LayoutUnit(-128) * 8.0f, LayoutUnit(-128 * 8));
  EXPECT_EQ(LayoutUnit(-128) * 128.0f, LayoutUnit(-128 * 128));

  EXPECT_EQ(LayoutUnit(-8) * -128.0f, LayoutUnit(-8 * -128));
  EXPECT_EQ(LayoutUnit(-8) * -8.0f, LayoutUnit(-8 * -8));
  EXPECT_EQ(LayoutUnit(-8) * 0.0f, LayoutUnit(-8 * 0));
  EXPECT_EQ(LayoutUnit(-8) * 8.0f, LayoutUnit(-8 * 8));
  EXPECT_EQ(LayoutUnit(-8) * 128.0f, LayoutUnit(-8 * 128));

  EXPECT_EQ(LayoutUnit(0) * -128.0f, LayoutUnit(0 * -128));
  EXPECT_EQ(LayoutUnit(0) * -8.0f, LayoutUnit(0 * -8));
  EXPECT_EQ(LayoutUnit(0) * 0.0f, LayoutUnit(0 * 0));
  EXPECT_EQ(LayoutUnit(0) * 8.0f, LayoutUnit(0 * 8));
  EXPECT_EQ(LayoutUnit(0) * 128.0f, LayoutUnit(0 * 128));

  EXPECT_EQ(LayoutUnit(8) * -128.0f, LayoutUnit(8 * -128));
  EXPECT_EQ(LayoutUnit(8) * -8.0f, LayoutUnit(8 * -8));
  EXPECT_EQ(LayoutUnit(8) * 0.0f, LayoutUnit(8 * 0));
  EXPECT_EQ(LayoutUnit(8) * 8.0f, LayoutUnit(8 * 8));
  EXPECT_EQ(LayoutUnit(8) * 128.0f, LayoutUnit(8 * 128));

  EXPECT_EQ(LayoutUnit(128) * -128.0f, LayoutUnit(128 * -128));
  EXPECT_EQ(LayoutUnit(128) * -8.0f, LayoutUnit(128 * -8));
  EXPECT_EQ(LayoutUnit(128) * 0.0f, LayoutUnit(128 * 0));
  EXPECT_EQ(LayoutUnit(128) * 8.0f, LayoutUnit(128 * 8));
  EXPECT_EQ(LayoutUnit(128) * 128.0f, LayoutUnit(128 * 128));

  EXPECT_EQ(-128.0f * LayoutUnit(-128), LayoutUnit(-128 * -128));
  EXPECT_EQ(-128.0f * LayoutUnit(-8), LayoutUnit(-128 * -8));
  EXPECT_EQ(-128.0f * LayoutUnit(0), LayoutUnit(-128 * 0));
  EXPECT_EQ(-128.0f * LayoutUnit(8), LayoutUnit(-128 * 8));
  EXPECT_EQ(-128.0f * LayoutUnit(128), LayoutUnit(-128 * 128));

  EXPECT_EQ(-8.0f * LayoutUnit(-128), LayoutUnit(-8 * -128));
  EXPECT_EQ(-8.0f * LayoutUnit(-8), LayoutUnit(-8 * -8));
  EXPECT_EQ(-8.0f * LayoutUnit(0), LayoutUnit(-8 * 0));
  EXPECT_EQ(-8.0f * LayoutUnit(8), LayoutUnit(-8 * 8));
  EXPECT_EQ(-8.0f * LayoutUnit(128), LayoutUnit(-8 * 128));

  EXPECT_EQ(0.0f * LayoutUnit(-128), LayoutUnit(0 * -128));
  EXPECT_EQ(0.0f * LayoutUnit(-8), LayoutUnit(0 * -8));
  EXPECT_EQ(0.0f * LayoutUnit(0), LayoutUnit(0 * 0));
  EXPECT_EQ(0.0f * LayoutUnit(8), LayoutUnit(0 * 8));
  EXPECT_EQ(0.0f * LayoutUnit(128), LayoutUnit(0 * 128));

  EXPECT_EQ(8.0f * LayoutUnit(-128), LayoutUnit(8 * -128));
  EXPECT_EQ(8.0f * LayoutUnit(-8), LayoutUnit(8 * -8));
  EXPECT_EQ(8.0f * LayoutUnit(0), LayoutUnit(8 * 0));
  EXPECT_EQ(8.0f * LayoutUnit(8), LayoutUnit(8 * 8));
  EXPECT_EQ(8.0f * LayoutUnit(128), LayoutUnit(8 * 128));

  EXPECT_EQ(128.0f * LayoutUnit(-128), LayoutUnit(128 * -128));
  EXPECT_EQ(128.0f * LayoutUnit(-8), LayoutUnit(128 * -8));
  EXPECT_EQ(128.0f * LayoutUnit(0), LayoutUnit(128 * 0));
  EXPECT_EQ(128.0f * LayoutUnit(8), LayoutUnit(128 * 8));
  EXPECT_EQ(128.0f * LayoutUnit(128), LayoutUnit(128 * 128));
}

TEST(LayoutUnitTest, FloatingPointDivisionAssignmentOperator) {
  LayoutUnit value_a(50.0f);
  float value_b = 10.0f;
  value_a /= value_b;

  EXPECT_FLOAT_EQ(value_b, 10.0f);
  EXPECT_FLOAT_EQ(value_a.toFloat(), 5.0f);
}

TEST(LayoutUnitTest, FloatingPointDivisionOperator) {
  EXPECT_EQ(LayoutUnit(-64) / -64.0f, LayoutUnit(-64.0f / -64.0f));
  EXPECT_EQ(LayoutUnit(-64) / -4.0f, LayoutUnit(-64.0f / -4.0f));
  EXPECT_EQ(LayoutUnit(-64) / 1.0f, LayoutUnit(-64.0f / 1.0f));
  EXPECT_EQ(LayoutUnit(-64) / 4.0f, LayoutUnit(-64.0f / 4.0f));
  EXPECT_EQ(LayoutUnit(-64) / 64.0f, LayoutUnit(-64.0f / 64.0f));

  EXPECT_EQ(LayoutUnit(-4) / -64.0f, LayoutUnit(-4.0f / -64.0f));
  EXPECT_EQ(LayoutUnit(-4) / -4.0f, LayoutUnit(-4.0f / -4.0f));
  EXPECT_EQ(LayoutUnit(-4) / 1.0f, LayoutUnit(-4.0f / 1.0f));
  EXPECT_EQ(LayoutUnit(-4) / 4.0f, LayoutUnit(-4.0f / 4.0f));
  EXPECT_EQ(LayoutUnit(-4) / 64.0f, LayoutUnit(-4.0f / 64.0f));

  EXPECT_EQ(LayoutUnit(1) / -64.0f, LayoutUnit(1.0f / -64.0f));
  EXPECT_EQ(LayoutUnit(1) / -4.0f, LayoutUnit(1.0f / -4.0f));
  EXPECT_EQ(LayoutUnit(1) / 1.0f, LayoutUnit(1.0f / 1.0f));
  EXPECT_EQ(LayoutUnit(1) / 4.0f, LayoutUnit(1.0f / 4.0f));
  EXPECT_EQ(LayoutUnit(1) / 64.0f, LayoutUnit(1.0f / 64.0f));

  EXPECT_EQ(LayoutUnit(4) / -64.0f, LayoutUnit(4.0f / -64.0f));
  EXPECT_EQ(LayoutUnit(4) / -4.0f, LayoutUnit(4.0f / -4.0f));
  EXPECT_EQ(LayoutUnit(4) / 1.0f, LayoutUnit(4.0f / 1.0f));
  EXPECT_EQ(LayoutUnit(4) / 4.0f, LayoutUnit(4.0f / 4.0f));
  EXPECT_EQ(LayoutUnit(4) / 64.0f, LayoutUnit(4.0f / 64.0f));

  EXPECT_EQ(LayoutUnit(64) / -64.0f, LayoutUnit(64.0f / -64.0f));
  EXPECT_EQ(LayoutUnit(64) / -4.0f, LayoutUnit(64.0f / -4.0f));
  EXPECT_EQ(LayoutUnit(64) / 1.0f, LayoutUnit(64.0f / 1.0f));
  EXPECT_EQ(LayoutUnit(64) / 4.0f, LayoutUnit(64.0f / 4.0f));
  EXPECT_EQ(LayoutUnit(64) / 64.0f, LayoutUnit(64.0f / 64.0f));
}

}  // namespace layout
}  // namespace cobalt
