Hash :
3fa8d578
Author :
Date :
2024-03-04T10:06:57
Make appendDecimal use the last char of the buffer ImmutableStringBuilder(1) means 1 char usable payload and \0. This this should fit appendDecimal(1) but did not. Fix the off by one error calling snprintf. Also: * removes const & from uint32_t argument * removes const & from operator<<, to stay consistent * Removes a redundant static_cast * Implements operator<< const char* with potentially better operator<<(const ImmutableString&) (may get compile time strlen) Fixed: angleproject:8567 Change-Id: Ibfff59f6846add0498d06e963266e50ec19baf80 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5332381 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ImmutableString_test.cpp:
// Tests for ImmutableString and ImmutableStringBuilder.
#include "compiler/translator/ImmutableString.h"
#include "compiler/translator/ImmutableStringBuilder.h"
#include "compiler/translator/PoolAlloc.h"
#include "gtest/gtest.h"
using namespace sh;
class ImmutableStringBuilderTest : public testing::Test
{
public:
ImmutableStringBuilderTest() {}
protected:
void SetUp() override
{
allocator.push();
SetGlobalPoolAllocator(&allocator);
}
void TearDown() override
{
SetGlobalPoolAllocator(nullptr);
allocator.pop();
}
angle::PoolAllocator allocator;
};
// Test writing a 32-bit signed int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest, AppendHexInt32)
{
int32_t i = -1;
ImmutableStringBuilder strBuilder(2 * sizeof(int32_t));
strBuilder.appendHex(i);
ImmutableString str = strBuilder;
EXPECT_EQ(std::string("ffffffff"), str.data());
}
// Test writing a 32-bit unsigned int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest, AppendHexUint32)
{
uint32_t i = 0x1234beefu;
ImmutableStringBuilder strBuilder(2 * sizeof(uint32_t));
strBuilder.appendHex(i);
ImmutableString str = strBuilder;
EXPECT_EQ(std::string("1234beef"), str.data());
}
// Test writing a 64-bit signed int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest, AppendHexInt64)
{
int64_t i = -1;
ImmutableStringBuilder strBuilder(2 * sizeof(int64_t));
strBuilder.appendHex(i);
ImmutableString str = strBuilder;
EXPECT_EQ(std::string("ffffffffffffffff"), str.data());
}
// Test writing a 64-bit unsigned int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest, AppendHexUint64)
{
uint64_t i = 0xfeedcafe9876beefull;
ImmutableStringBuilder strBuilder(2 * sizeof(uint64_t));
strBuilder.appendHex(i);
ImmutableString str = strBuilder;
EXPECT_EQ(std::string("feedcafe9876beef"), str.data());
}
// Test writing a decimal using ImmutableStringBuilder of exact size.
TEST_F(ImmutableStringBuilderTest, AppendDecimal)
{
ImmutableStringBuilder b1(1);
b1.appendDecimal(1);
ImmutableString s1 = b1;
EXPECT_EQ(std::string("1"), s1.data());
ImmutableStringBuilder b20(2);
b20.appendDecimal(20);
ImmutableString s20 = b20;
EXPECT_EQ(std::string("20"), s20.data());
ImmutableStringBuilder b30000(5);
b30000.appendDecimal(30000);
ImmutableString s30000 = b30000;
EXPECT_EQ(std::string("30000"), s30000.data());
}