| // Copyright 2025 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include"base/byte_count.h" |
| |
| #include"base/test/gtest_util.h" |
| #include"testing/gmock/include/gmock/gmock.h" |
| #include"testing/gtest/include/gtest/gtest.h" |
| |
| namespace base{ |
| |
| TEST(ByteCount,ConstructionDefault){ |
| constexprByteCount bytes; |
| EXPECT_EQ(0, bytes.InBytes()); |
| EXPECT_EQ(0, bytes.InKiB()); |
| EXPECT_EQ(0, bytes.InMiB()); |
| EXPECT_EQ(0, bytes.InGiB()); |
| EXPECT_EQ(0, bytes.InBytesUnsigned()); |
| } |
| |
| TEST(ByteCount,ConstructionByteCount){ |
| constexprByteCount bytes(1024*1024*1024); |
| EXPECT_EQ(1024*1024*1024, bytes.InBytes()); |
| EXPECT_EQ(1024*1024, bytes.InKiB()); |
| EXPECT_EQ(1024, bytes.InMiB()); |
| EXPECT_EQ(1, bytes.InGiB()); |
| EXPECT_EQ(1024u*1024*1024, bytes.InBytesUnsigned()); |
| } |
| |
| TEST(ByteCount,ConstructionUnsigned){ |
| auto bytes=ByteCount::FromUnsigned(5u); |
| EXPECT_EQ(5, bytes.InBytes()); |
| } |
| |
| TEST(ByteCount,ConstructionUnsignedInvalid){ |
| BASE_EXPECT_DEATH( |
| {ByteCount::FromUnsigned(std::numeric_limits<uint64_t>::max());},""); |
| } |
| |
| TEST(ByteCount,ConstructionOtherUnit){ |
| auto kib5=KiB(5); |
| EXPECT_EQ(5*1024, kib5.InBytes()); |
| |
| auto mib5=MiB(5); |
| EXPECT_EQ(5*1024*1024, mib5.InBytes()); |
| |
| auto gib5=GiB(5); |
| EXPECT_EQ(5ll*1024*1024*1024, gib5.InBytes()); |
| } |
| |
| TEST(ByteCount,ConstructionOtherUnitInvalid){ |
| BASE_EXPECT_DEATH({KiB(std::numeric_limits<int64_t>::max());},""); |
| |
| BASE_EXPECT_DEATH({MiB(std::numeric_limits<int64_t>::max());},""); |
| |
| BASE_EXPECT_DEATH({GiB(std::numeric_limits<int64_t>::max());},""); |
| } |
| |
| TEST(ByteCount,IsZero){ |
| EXPECT_TRUE(ByteCount(0).is_zero()); |
| EXPECT_FALSE(ByteCount(-2).is_zero()); |
| EXPECT_FALSE(ByteCount(2).is_zero()); |
| } |
| |
| TEST(ByteCount,InFloating){ |
| constexprByteCount bytes(3435973836); |
| EXPECT_THAT(bytes.InKiBF(), testing::DoubleEq(3355443.19921875)); |
| EXPECT_THAT(bytes.InMiBF(), testing::DoubleEq(3276.7999992370605)); |
| EXPECT_THAT(bytes.InGiBF(), testing::DoubleEq(3.1999999992549419)); |
| } |
| |
| TEST(ByteCount,InUnsignedInvalid){ |
| ByteCount bytes(-2); |
| BASE_EXPECT_DEATH({ bytes.InBytesUnsigned();},""); |
| } |
| |
| TEST(ByteCount,Arithmetic){ |
| ByteCount bytes(42); |
| |
| ByteCount add= bytes+ByteCount(10); |
| EXPECT_EQ(52, add.InBytes()); |
| |
| ByteCount sub= bytes-ByteCount(10); |
| EXPECT_EQ(32, sub.InBytes()); |
| |
| ByteCount mul= bytes*10; |
| EXPECT_EQ(420, mul.InBytes()); |
| |
| ByteCount div= bytes/2; |
| EXPECT_EQ(21, div.InBytes()); |
| } |
| |
| TEST(ByteCount,ArithmeticInvalid){ |
| ByteCount max_bytes(std::numeric_limits<int64_t>::max()); |
| |
| BASE_EXPECT_DEATH({ max_bytes+ max_bytes;},""); |
| |
| BASE_EXPECT_DEATH({ByteCount()- max_bytes- max_bytes;},""); |
| |
| BASE_EXPECT_DEATH({ max_bytes*2;},""); |
| |
| BASE_EXPECT_DEATH({ max_bytes/0;},""); |
| } |
| |
| TEST(ByteCount,Comparison){ |
| ByteCount a(1); |
| ByteCount b(2); |
| ByteCount c(2); |
| |
| EXPECT_TRUE(a< b); |
| EXPECT_FALSE(b< a); |
| EXPECT_FALSE(b< c); |
| |
| EXPECT_TRUE(a<= b); |
| EXPECT_FALSE(b<= a); |
| EXPECT_TRUE(b<= c); |
| |
| EXPECT_FALSE(a> b); |
| EXPECT_TRUE(b> a); |
| EXPECT_FALSE(b> c); |
| |
| EXPECT_FALSE(a>= b); |
| EXPECT_TRUE(b>= a); |
| EXPECT_TRUE(b>= c); |
| |
| EXPECT_FALSE(a== b); |
| EXPECT_TRUE(b== c); |
| |
| EXPECT_TRUE(a!= b); |
| EXPECT_FALSE(b!= c); |
| } |
| |
| }// namespace base |