blob: 2e5268f8ec0d1e65e19b7f21b4b07b3b1bee248d [file] [log] [blame]
// Copyright 2020 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 "src/storage/volume_image/utils/block_utils.h"
#include <gtest/gtest.h>
namespace storage::volume_image {
namespace {
TEST(BlockUtilsTest, GetOffsetFromBlockStartIsCorrect) {
EXPECT_EQ(GetOffsetFromBlockStart(2048, 512), 0u);
EXPECT_EQ(GetOffsetFromBlockStart(2049, 512), 1u);
EXPECT_EQ(GetOffsetFromBlockStart(2047, 512), 511u);
}
TEST(BlockUtilsTest, GetRemainderFromBlockIsCorrect) {
EXPECT_EQ(GetRemainderFromBlock(2048, 512), 0u);
EXPECT_EQ(GetRemainderFromBlock(2049, 512), 511u);
EXPECT_EQ(GetRemainderFromBlock(2047, 512), 1u);
}
TEST(BlockUtilsTest, GetBlockCountFromAlignedByteOffsetIsCorrect) {
EXPECT_EQ(GetBlockCount(2048, 0, 512), 0u);
EXPECT_EQ(GetBlockCount(2048, 1, 512), 1u);
EXPECT_EQ(GetBlockCount(2048, 512, 512), 1u);
EXPECT_EQ(GetBlockCount(2048, 513, 512), 2u);
EXPECT_EQ(GetBlockCount(2048, 1023, 512), 2u);
EXPECT_EQ(GetBlockCount(2048, 1024, 512), 2u);
}
TEST(BlockUtilsTest, GetBlockCountFromUnalignedByteOffsetIsCorrect) {
EXPECT_EQ(GetBlockCount(2049, 0, 512), 0u);
EXPECT_EQ(GetBlockCount(2049, 1, 512), 1u);
EXPECT_EQ(GetBlockCount(2049, 512, 512), 2u);
EXPECT_EQ(GetBlockCount(2049, 513, 512), 2u);
EXPECT_EQ(GetBlockCount(2049, 1023, 512), 2u);
EXPECT_EQ(GetBlockCount(2049, 1024, 512), 3u);
}
TEST(BlockUtilsTest, GetBlockOffsetIsCorrect) {
EXPECT_EQ(GetBlockFromBytes(0, 512), 0u);
EXPECT_EQ(GetBlockFromBytes(1, 512), 0u);
EXPECT_EQ(GetBlockFromBytes(511, 512), 0u);
EXPECT_EQ(GetBlockFromBytes(512, 512), 1u);
EXPECT_EQ(GetBlockFromBytes(513, 512), 1u);
EXPECT_EQ(GetBlockFromBytes(1023, 512), 1u);
EXPECT_EQ(GetBlockFromBytes(1024, 512), 2u);
}
TEST(BlockUtilsTest, IsOffsetBlockAlignedIsCorrect) {
EXPECT_TRUE(IsOffsetBlockAligned(0, 512));
EXPECT_TRUE(IsOffsetBlockAligned(512, 512));
EXPECT_TRUE(IsOffsetBlockAligned(1024, 512));
EXPECT_FALSE(IsOffsetBlockAligned(1, 512));
EXPECT_FALSE(IsOffsetBlockAligned(511, 512));
EXPECT_FALSE(IsOffsetBlockAligned(1023, 512));
}
} // namespace
} // namespace storage::volume_image