69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
//===-- RPC test to check args to printf ----------------------------------===//
|
|
//
|
|
// 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 "test/IntegrationTest/test.h"
|
|
|
|
#include "src/__support/GPU/utils.h"
|
|
#include "src/stdio/fopen.h"
|
|
#include "src/stdio/fprintf.h"
|
|
|
|
using namespace LIBC_NAMESPACE;
|
|
|
|
FILE *file = LIBC_NAMESPACE::fopen("testdata/test_data.txt", "w");
|
|
|
|
TEST_MAIN(int, char **, char **) {
|
|
ASSERT_TRUE(file && "failed to open file");
|
|
// Check basic printing.
|
|
int written = 0;
|
|
written = LIBC_NAMESPACE::fprintf(file, "A simple string\n");
|
|
ASSERT_EQ(written, 16);
|
|
|
|
const char *str = "A simple string\n";
|
|
written = LIBC_NAMESPACE::fprintf(file, "%s", str);
|
|
ASSERT_EQ(written, 16);
|
|
|
|
// Check printing a different value with each thread.
|
|
uint64_t thread_id = gpu::get_thread_id();
|
|
written = LIBC_NAMESPACE::fprintf(file, "%8ld\n", thread_id);
|
|
ASSERT_EQ(written, 9);
|
|
|
|
written = LIBC_NAMESPACE::fprintf(file, "%d%c%.1f\n", 1, 'c', 1.0);
|
|
ASSERT_EQ(written, 6);
|
|
|
|
written = LIBC_NAMESPACE::fprintf(file, "%032b%s\n", 1, "A simple string\n");
|
|
ASSERT_EQ(written, 49);
|
|
|
|
// Check that the server correctly handles divergent numbers of arguments.
|
|
const char *format = gpu::get_thread_id() % 2 ? "%s" : "%20ld\n";
|
|
written = LIBC_NAMESPACE::fprintf(file, format, str);
|
|
ASSERT_EQ(written, gpu::get_thread_id() % 2 ? 16 : 21);
|
|
|
|
format = gpu::get_thread_id() % 2 ? "%s" : str;
|
|
written = LIBC_NAMESPACE::fprintf(file, format, str);
|
|
ASSERT_EQ(written, 16);
|
|
|
|
// Check that we handle null arguments correctly.
|
|
written = LIBC_NAMESPACE::fprintf(file, "%p", nullptr);
|
|
ASSERT_EQ(written, 9);
|
|
|
|
#ifndef LIBC_COPT_PRINTF_NO_NULLPTR_CHECKS
|
|
written = LIBC_NAMESPACE::fprintf(file, "%s", nullptr);
|
|
ASSERT_EQ(written, 6);
|
|
#endif // LIBC_COPT_PRINTF_NO_NULLPTR_CHECKS
|
|
|
|
// Check for extremely abused variable width arguments
|
|
written = LIBC_NAMESPACE::fprintf(file, "%**d", 1, 2, 1.0);
|
|
ASSERT_EQ(written, 4);
|
|
written = LIBC_NAMESPACE::fprintf(file, "%**d%6d", 1, 2, 1.0);
|
|
ASSERT_EQ(written, 10);
|
|
written = LIBC_NAMESPACE::fprintf(file, "%**.**f", 1, 2, 1.0);
|
|
ASSERT_EQ(written, 7);
|
|
|
|
return 0;
|
|
}
|