Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2019 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #define LOG_TAG "SizeTest"
     18 
     19 #include <cmath>
     20 #include <cstdlib>
     21 
     22 #include <ui/Size.h>
     23 
     24 #include <gtest/gtest.h>
     25 
     26 namespace android {
     27 namespace ui {
     28 
     29 TEST(SizeTest, BasicConstructionAndEqualityComparison) {
     30     Size s(123, 456);
     31 
     32     EXPECT_EQ(123, s.width);
     33     EXPECT_EQ(123, s.getWidth());
     34 
     35     EXPECT_EQ(456, s.height);
     36     EXPECT_EQ(456, s.getHeight());
     37 
     38     EXPECT_EQ(Size(123, 456), s);
     39     EXPECT_NE(Size(456, 123), s);
     40 }
     41 
     42 TEST(SizeTest, BasicLessThanComparison) {
     43     EXPECT_TRUE(Size(0, 1) < Size(2, 3));
     44     EXPECT_FALSE(Size(2, 3) < Size(0, 1));
     45 
     46     EXPECT_TRUE(Size(0, 3) < Size(2, 1));
     47     EXPECT_FALSE(Size(2, 1) < Size(0, 3));
     48 
     49     EXPECT_TRUE(Size(0, 1) < Size(0, 3));
     50     EXPECT_FALSE(Size(0, 3) < Size(0, 1));
     51 
     52     EXPECT_FALSE(Size(1, 1) < Size(1, 1));
     53 }
     54 
     55 TEST(SizeTest, ValidAndEmpty) {
     56     {
     57         Size s;
     58         EXPECT_FALSE(s.isValid());
     59         EXPECT_FALSE(s.isEmpty());
     60     }
     61 
     62     {
     63         Size s(-1, -1);
     64         EXPECT_FALSE(s.isValid());
     65         EXPECT_FALSE(s.isEmpty());
     66     }
     67 
     68     {
     69         Size s(1, -1000);
     70         EXPECT_FALSE(s.isValid());
     71         EXPECT_FALSE(s.isEmpty());
     72     }
     73 
     74     {
     75         Size s(-1000, 1);
     76         EXPECT_FALSE(s.isValid());
     77         EXPECT_FALSE(s.isEmpty());
     78     }
     79 
     80     {
     81         Size s(-1000, -1000);
     82         EXPECT_FALSE(s.isValid());
     83         EXPECT_FALSE(s.isEmpty());
     84     }
     85 
     86     {
     87         const auto& s = Size::INVALID;
     88         EXPECT_FALSE(s.isValid());
     89         EXPECT_FALSE(s.isEmpty());
     90     }
     91 
     92     {
     93         Size s(123, 456);
     94         s.makeInvalid();
     95         EXPECT_FALSE(s.isValid());
     96         EXPECT_FALSE(s.isEmpty());
     97     }
     98 
     99     {
    100         Size s(0, 0);
    101         EXPECT_TRUE(s.isValid());
    102         EXPECT_TRUE(s.isEmpty());
    103     }
    104 
    105     {
    106         const auto& s = Size::EMPTY;
    107         EXPECT_TRUE(s.isValid());
    108         EXPECT_TRUE(s.isEmpty());
    109     }
    110 
    111     {
    112         Size s(123, 456);
    113         s.clear();
    114         EXPECT_TRUE(s.isValid());
    115         EXPECT_TRUE(s.isEmpty());
    116     }
    117 
    118     {
    119         Size s(123, 456);
    120         EXPECT_TRUE(s.isValid());
    121         EXPECT_FALSE(s.isEmpty());
    122     }
    123 }
    124 
    125 TEST(SizeTest, Set) {
    126     {
    127         Size s;
    128         s.setWidth(0);
    129         EXPECT_EQ(Size(0, -1), s);
    130     }
    131 
    132     {
    133         Size s;
    134         s.setHeight(0);
    135         EXPECT_EQ(Size(-1, 0), s);
    136     }
    137 
    138     {
    139         Size s;
    140         s.set(123, 456);
    141         EXPECT_EQ(Size(123, 456), s);
    142     }
    143 }
    144 
    145 template <typename T, typename U>
    146 void ClampTest(T input, U expected) {
    147     // The constructor, set(), setWidth() and setHeight() all allow arbitrary
    148     // conversions from other numeric types, and implement clamping if necessary.
    149 
    150     EXPECT_EQ(Size(expected, expected), Size(input, input));
    151 
    152     {
    153         Size s;
    154         s.set(input, input);
    155         EXPECT_EQ(Size(expected, expected), s);
    156     }
    157 
    158     {
    159         Size s;
    160         s.setWidth(input);
    161         EXPECT_EQ(expected, s.width);
    162     }
    163 
    164     {
    165         Size s;
    166         s.setHeight(input);
    167         EXPECT_EQ(expected, s.height);
    168     }
    169 }
    170 
    171 TEST(SizeTest, Int8RangeIsNotClamped) {
    172     ClampTest(std::numeric_limits<int8_t>::max(), std::numeric_limits<int8_t>::max());
    173     ClampTest(int8_t(0), int8_t(0));
    174     ClampTest(std::numeric_limits<int8_t>::lowest(), std::numeric_limits<int8_t>::lowest());
    175 }
    176 
    177 TEST(SizeTest, FloatRangeIsClamped) {
    178     ClampTest(std::numeric_limits<float>::max(), std::numeric_limits<int32_t>::max());
    179     ClampTest(float(0), int32_t(0));
    180     ClampTest(std::numeric_limits<float>::lowest(), std::numeric_limits<int32_t>::lowest());
    181 }
    182 
    183 } // namespace ui
    184 } // namespace android
    185