mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
195 lines
5.3 KiB
C++
195 lines
5.3 KiB
C++
//===--- OwnedStringTest.cpp ----------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "swift/Basic/OwnedString.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace swift;
|
|
|
|
TEST(OwnedStringTest, char_pointer_empty) {
|
|
const char *data = "";
|
|
const size_t length = strlen(data);
|
|
OwnedString ownedString(data);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_TRUE(ownedString.empty());
|
|
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_TRUE(copy.empty());
|
|
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("", str);
|
|
EXPECT_EQ(length, str.size());
|
|
}
|
|
|
|
TEST(OwnedStringTest, char_pointer_non_empty) {
|
|
const char *data = "string";
|
|
const size_t length = strlen(data);
|
|
OwnedString ownedString(data);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("string", str);
|
|
EXPECT_EQ(length, strlen(str.data()));
|
|
}
|
|
|
|
TEST(OwnedStringTest, char_pointer_length_equal) {
|
|
const char *data = "string";
|
|
size_t length = strlen(data);
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
// Make sure we correctly copied the data and that it is null
|
|
// terminated.
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("string", str);
|
|
EXPECT_EQ(length, strlen(str.data()));
|
|
}
|
|
|
|
TEST(OwnedStringTest, char_pointer_length_nonzero) {
|
|
const char *data = "string";
|
|
const size_t length = 1;
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
// Make sure we correctly copied the data and that it is null
|
|
// terminated.
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("s", str);
|
|
EXPECT_EQ(1, strlen(str.data()));
|
|
}
|
|
|
|
TEST(OwnedStringTest, char_pointer_length_zero) {
|
|
const char *data = "string";
|
|
const size_t length = 0;
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_TRUE(ownedString.empty());
|
|
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_TRUE(copy.empty());
|
|
}
|
|
|
|
TEST(OwnedStringTest, copy_original_new_different) {
|
|
// Initialize a mutable string.
|
|
const char *original = "string";
|
|
const size_t length = strlen(original);
|
|
char *data = static_cast<char *>(malloc(length + 1));
|
|
memcpy(data, original, length);
|
|
data[length] = '\0';
|
|
|
|
// Create an OwnedString.
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
// Copy the string
|
|
OwnedString copy = ownedString.copy();
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
// Make sure we correctly copied the data and that it is null
|
|
// terminated.
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("string", str);
|
|
EXPECT_EQ(length, strlen(str.data()));
|
|
|
|
// Make sure updating the original pointer doesn't affect the copy.
|
|
data[0] = 'a';
|
|
|
|
EXPECT_EQ("string", str);
|
|
}
|
|
|
|
TEST(OwnedStringTest, copy_constructor_original_not_copy) {
|
|
// Initialize a mutable string.
|
|
const char *original = "string";
|
|
const size_t length = strlen(original);
|
|
char *data = static_cast<char *>(malloc(length + 1));
|
|
memcpy(data, original, length);
|
|
data[length] = '\0';
|
|
|
|
// Create an OwnedString.
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
// Copy the string
|
|
OwnedString copy = OwnedString(ownedString);
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
// Make sure we correctly copied the data and that it is null
|
|
// terminated.
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("string", str);
|
|
EXPECT_EQ(length, strlen(str.data()));
|
|
|
|
// Make sure updating the original pointer doesn't affect the copy.
|
|
data[0] = 'a';
|
|
|
|
EXPECT_EQ("atring", str);
|
|
}
|
|
|
|
TEST(OwnedStringTest, copy_constructor_original_copy) {
|
|
// Initialize a mutable string.
|
|
const char *original = "string";
|
|
const size_t length = strlen(original);
|
|
char *data = static_cast<char *>(malloc(length + 1));
|
|
memcpy(data, original, length);
|
|
data[length] = '\0';
|
|
|
|
// Create an OwnedString.
|
|
OwnedString ownedString(data, length);
|
|
|
|
EXPECT_EQ(length, ownedString.size());
|
|
EXPECT_FALSE(ownedString.empty());
|
|
|
|
// Copy the string
|
|
OwnedString copy = OwnedString(ownedString.copy());
|
|
EXPECT_EQ(length, copy.size());
|
|
EXPECT_FALSE(copy.empty());
|
|
|
|
// Make sure we correctly copied the data and that it is null
|
|
// terminated.
|
|
StringRef str = copy.str();
|
|
EXPECT_EQ("string", str);
|
|
EXPECT_EQ(length, strlen(str.data()));
|
|
|
|
// Make sure updating the original pointer doesn't affect the copy.
|
|
data[0] = 'a';
|
|
|
|
EXPECT_EQ("string", str);
|
|
}
|