//===-- size_class_map_test.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "tests/scudo_unit_test.h"

#include "size_class_map.h"

template <class SizeClassMap> void testSizeClassMap() {
  typedef SizeClassMap SCMap;
  scudo::printMap<SCMap>();
  scudo::validateMap<SCMap>();
}

TEST(ScudoSizeClassMapTest, DefaultSizeClassMap) {
  testSizeClassMap<scudo::DefaultSizeClassMap>();
}

TEST(ScudoSizeClassMapTest, SvelteSizeClassMap) {
  testSizeClassMap<scudo::SvelteSizeClassMap>();
}

TEST(ScudoSizeClassMapTest, AndroidSizeClassMap) {
  testSizeClassMap<scudo::AndroidSizeClassMap>();
}


struct OneClassSizeClassConfig {
  static const scudo::uptr NumBits = 1;
  static const scudo::uptr MinSizeLog = 5;
  static const scudo::uptr MidSizeLog = 5;
  static const scudo::uptr MaxSizeLog = 5;
  static const scudo::u32 MaxNumCachedHint = 0;
  static const scudo::uptr MaxBytesCachedLog = 0;
};

TEST(ScudoSizeClassMapTest, OneClassSizeClassMap) {
  testSizeClassMap<scudo::FixedSizeClassMap<OneClassSizeClassConfig>>();
}

#if SCUDO_CAN_USE_PRIMARY64
struct LargeMaxSizeClassConfig {
  static const scudo::uptr NumBits = 3;
  static const scudo::uptr MinSizeLog = 4;
  static const scudo::uptr MidSizeLog = 8;
  static const scudo::uptr MaxSizeLog = 63;
  static const scudo::u32 MaxNumCachedHint = 128;
  static const scudo::uptr MaxBytesCachedLog = 16;
};

TEST(ScudoSizeClassMapTest, LargeMaxSizeClassMap) {
  testSizeClassMap<scudo::FixedSizeClassMap<LargeMaxSizeClassConfig>>();
}
#endif
