// 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 "starboard/memory.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace starboard {
namespace nplb {
namespace {

TEST(SbMemoryAlignToPageSizeTest, AlignsVariousSizes) {
  EXPECT_EQ(0, SbMemoryAlignToPageSize(0));
  EXPECT_EQ(SB_MEMORY_PAGE_SIZE, SbMemoryAlignToPageSize(1));
  EXPECT_EQ(SB_MEMORY_PAGE_SIZE,
            SbMemoryAlignToPageSize(SB_MEMORY_PAGE_SIZE - 1));
  EXPECT_EQ(SB_MEMORY_PAGE_SIZE, SbMemoryAlignToPageSize(SB_MEMORY_PAGE_SIZE));
  EXPECT_EQ(100 * SB_MEMORY_PAGE_SIZE,
            SbMemoryAlignToPageSize(100 * SB_MEMORY_PAGE_SIZE));
}

}  // namespace
}  // namespace nplb
}  // namespace starboard
