//===-- Unittests for memset ----------------------------------------------===//
//
// 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 "src/__support/CPP/ArrayRef.h"
#include "src/string/memset.h"
#include "utils/UnitTest/Test.h"

using __llvm_libc::cpp::Array;
using __llvm_libc::cpp::ArrayRef;
using Data = Array<char, 2048>;

static const ArrayRef<char> kDeadcode("DEADC0DE", 8);

// Returns a Data object filled with a repetition of `filler`.
Data getData(ArrayRef<char> filler) {
  Data out;
  for (size_t i = 0; i < out.size(); ++i)
    out[i] = filler[i % filler.size()];
  return out;
}

TEST(LlvmLibcMemsetTest, Thorough) {
  const Data dirty = getData(kDeadcode);
  for (int value = -1; value <= 1; ++value) {
    for (size_t count = 0; count < 1024; ++count) {
      for (size_t align = 0; align < 64; ++align) {
        auto buffer = dirty;
        void *const dst = &buffer[align];
        void *const ret = __llvm_libc::memset(dst, value, count);
        // Return value is `dst`.
        ASSERT_EQ(ret, dst);
        // Everything before copy is untouched.
        for (size_t i = 0; i < align; ++i)
          ASSERT_EQ(buffer[i], dirty[i]);
        // Everything in between is copied.
        for (size_t i = 0; i < count; ++i)
          ASSERT_EQ(buffer[align + i], (char)value);
        // Everything after copy is untouched.
        for (size_t i = align + count; i < dirty.size(); ++i)
          ASSERT_EQ(buffer[i], dirty[i]);
      }
    }
  }
}

// FIXME: Add tests with reads and writes on the boundary of a read/write
// protected page to check we're not reading nor writing prior/past the allowed
// regions.
