//===-- Unittests for putc ---------------------------------------------===//
//
// 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/stdio/fclose.h"
#include "src/stdio/ferror.h"
#include "src/stdio/fopen.h"
#include "src/stdio/fread.h"

#include "src/stdio/putc.h"

#include "test/UnitTest/Test.h"

#include <stdio.h>

TEST(LlvmLibcPutcTest, WriteToFile) {
  constexpr char FILENAME[] = "testdata/putc_output.test";
  ::FILE *file = LIBC_NAMESPACE::fopen(FILENAME, "w");
  ASSERT_FALSE(file == nullptr);

  constexpr char simple[] = "simple letters";
  for (size_t i = 0; i < sizeof(simple); ++i) {
    ASSERT_EQ(LIBC_NAMESPACE::putc(simple[i], file), 0);
  }

  ASSERT_EQ(0, LIBC_NAMESPACE::fclose(file));

  file = LIBC_NAMESPACE::fopen(FILENAME, "r");
  ASSERT_FALSE(file == nullptr);
  char data[50];

  ASSERT_EQ(LIBC_NAMESPACE::fread(data, 1, sizeof(simple) - 1, file),
            sizeof(simple) - 1);
  data[sizeof(simple) - 1] = '\0';

  ASSERT_STREQ(data, simple);

  ASSERT_EQ(LIBC_NAMESPACE::ferror(file), 0);
  EXPECT_LT(LIBC_NAMESPACE::putc('L', file), 0);

  ASSERT_EQ(LIBC_NAMESPACE::fclose(file), 0);
}
