5 #include "sw/device/silicon_creator/lib/dbg_print.h"
7 #include "gtest/gtest.h"
8 #include "sw/device/silicon_creator/lib/drivers/uart.h"
9 #include "sw/device/silicon_creator/lib/error.h"
11 namespace dbg_printf_unittest {
15 static std::string *uart_buf =
new std::string;
16 extern "C" void uart_putchar(uint8_t c) { uart_buf->push_back(c); }
18 TEST(LogTest, PrintfFormatOnly) {
21 EXPECT_EQ(*uart_buf,
"A");
24 dbg_printf(
"1234567890\n");
25 EXPECT_EQ(*uart_buf,
"1234567890\n");
28 TEST(LogTest, PrintfChar) {
30 dbg_printf(
"%c",
'A');
31 EXPECT_EQ(*uart_buf,
"A");
34 TEST(LogTest, PrintfInt) {
37 EXPECT_EQ(*uart_buf,
"0");
40 dbg_printf(
"%d", -123);
41 EXPECT_EQ(*uart_buf,
"-123");
44 dbg_printf(
"%d", 12345);
45 EXPECT_EQ(*uart_buf,
"12345");
48 TEST(LogTest, PrintfUnsignedInt) {
51 EXPECT_EQ(*uart_buf,
"0");
54 dbg_printf(
"%u", 0xFFFFFFFF);
55 EXPECT_EQ(*uart_buf,
"4294967295");
58 dbg_printf(
"%u", 12345);
59 EXPECT_EQ(*uart_buf,
"12345");
62 TEST(LogTest, PrintfHex) {
64 dbg_printf(
"%x", 0xabcdef01);
65 EXPECT_EQ(*uart_buf,
"abcdef01");
68 dbg_printf(
"0x%x%x", 0x01020304, 0x05060708);
69 EXPECT_EQ(*uart_buf,
"0x0102030405060708");
72 TEST(LogTest, PrintfString) {
74 dbg_printf(
"Hello, %s!",
"World");
75 EXPECT_EQ(*uart_buf,
"Hello, World!");
78 dbg_printf(
"%s%s",
"Open",
"Titan");
79 EXPECT_EQ(*uart_buf,
"OpenTitan");
82 dbg_printf(
"%s%s%s%s%s",
"A",
"",
"B",
"",
"C");
83 EXPECT_EQ(*uart_buf,
"ABC");
86 TEST(LogTest, PutsString) {
88 dbg_puts(
"Hello, %s!");
90 EXPECT_EQ(*uart_buf,
"Hello, %s!");
93 dbg_puts(
"OpenTitan");
94 EXPECT_EQ(*uart_buf,
"OpenTitan");
97 TEST(LogTest, PrintfMix) {
99 dbg_printf(
"%s%x",
"OpenTitan", 0x0000000a);
100 EXPECT_EQ(*uart_buf,
"OpenTitan0000000a");
103 TEST(LogTest, BadFormatSpecifier) {
106 #pragma GCC diagnostic push
107 #pragma GCC diagnostic ignored "-Wformat"
108 #pragma GCC diagnostic ignored "-Wformat-extra-args"
110 dbg_printf(
"%z", 0x0000000a);
111 EXPECT_EQ(*uart_buf,
"%z");
115 EXPECT_EQ(*uart_buf,
"abcd%");
118 dbg_printf(
"abcd%%");
119 EXPECT_EQ(*uart_buf,
"abcd%");
120 #pragma GCC diagnostic pop