Zachary Turner | 0e31a38 | 2016-09-27 16:37:30 +0000 | [diff] [blame] | 1 | //===- StringExtrasTest.cpp - Unit tests for String extras ----------------===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #include "llvm/ADT/StringExtras.h" |
| 11 | #include "gtest/gtest.h" |
| 12 | |
| 13 | using namespace llvm; |
| 14 | |
| 15 | TEST(StringExtrasTest, Join) { |
| 16 | std::vector<std::string> Items; |
| 17 | EXPECT_EQ("", join(Items.begin(), Items.end(), " <sep> ")); |
| 18 | |
| 19 | Items = {"foo"}; |
| 20 | EXPECT_EQ("foo", join(Items.begin(), Items.end(), " <sep> ")); |
| 21 | |
| 22 | Items = {"foo", "bar"}; |
| 23 | EXPECT_EQ("foo <sep> bar", join(Items.begin(), Items.end(), " <sep> ")); |
| 24 | |
| 25 | Items = {"foo", "bar", "baz"}; |
| 26 | EXPECT_EQ("foo <sep> bar <sep> baz", |
| 27 | join(Items.begin(), Items.end(), " <sep> ")); |
| 28 | } |
| 29 | |
| 30 | TEST(StringExtrasTest, JoinItems) { |
| 31 | const char *Foo = "foo"; |
| 32 | std::string Bar = "bar"; |
| 33 | llvm::StringRef Baz = "baz"; |
| 34 | char X = 'x'; |
| 35 | |
| 36 | EXPECT_EQ("", join_items(" <sep> ")); |
| 37 | EXPECT_EQ("", join_items('/')); |
| 38 | |
| 39 | EXPECT_EQ("foo", join_items(" <sep> ", Foo)); |
| 40 | EXPECT_EQ("foo", join_items('/', Foo)); |
| 41 | |
| 42 | EXPECT_EQ("foo <sep> bar", join_items(" <sep> ", Foo, Bar)); |
| 43 | EXPECT_EQ("foo/bar", join_items('/', Foo, Bar)); |
| 44 | |
| 45 | EXPECT_EQ("foo <sep> bar <sep> baz", join_items(" <sep> ", Foo, Bar, Baz)); |
| 46 | EXPECT_EQ("foo/bar/baz", join_items('/', Foo, Bar, Baz)); |
| 47 | |
| 48 | EXPECT_EQ("foo <sep> bar <sep> baz <sep> x", |
| 49 | join_items(" <sep> ", Foo, Bar, Baz, X)); |
| 50 | |
| 51 | EXPECT_EQ("foo/bar/baz/x", join_items('/', Foo, Bar, Baz, X)); |
| 52 | } |
Zachary Turner | e46b449 | 2017-04-25 20:21:35 +0000 | [diff] [blame] | 53 | |
| 54 | TEST(StringExtrasTest, ToAndFromHex) { |
| 55 | std::vector<uint8_t> OddBytes = {0x5, 0xBD, 0x0D, 0x3E, 0xCD}; |
| 56 | std::string OddStr = "05BD0D3ECD"; |
| 57 | StringRef OddData(reinterpret_cast<const char *>(OddBytes.data()), |
| 58 | OddBytes.size()); |
| 59 | EXPECT_EQ(OddStr, toHex(OddData)); |
| 60 | EXPECT_EQ(OddData, fromHex(StringRef(OddStr).drop_front())); |
| 61 | |
| 62 | std::vector<uint8_t> EvenBytes = {0xA5, 0xBD, 0x0D, 0x3E, 0xCD}; |
| 63 | std::string EvenStr = "A5BD0D3ECD"; |
| 64 | StringRef EvenData(reinterpret_cast<const char *>(EvenBytes.data()), |
| 65 | EvenBytes.size()); |
| 66 | EXPECT_EQ(EvenStr, toHex(EvenData)); |
| 67 | EXPECT_EQ(EvenData, fromHex(EvenStr)); |
Pavel Labath | ec000f4 | 2017-06-23 12:55:02 +0000 | [diff] [blame] | 68 | } |
| 69 | |
| 70 | TEST(StringExtrasTest, to_float) { |
| 71 | float F; |
| 72 | EXPECT_TRUE(to_float("4.7", F)); |
Simon Pilgrim | 171ba4a | 2017-06-23 13:53:55 +0000 | [diff] [blame] | 73 | EXPECT_FLOAT_EQ(4.7f, F); |
Pavel Labath | ec000f4 | 2017-06-23 12:55:02 +0000 | [diff] [blame] | 74 | |
| 75 | double D; |
| 76 | EXPECT_TRUE(to_float("4.7", D)); |
| 77 | EXPECT_DOUBLE_EQ(4.7, D); |
| 78 | |
| 79 | long double LD; |
| 80 | EXPECT_TRUE(to_float("4.7", LD)); |
| 81 | EXPECT_DOUBLE_EQ(4.7, LD); |
| 82 | |
| 83 | EXPECT_FALSE(to_float("foo", F)); |
| 84 | EXPECT_FALSE(to_float("7.4 foo", F)); |
Simon Pilgrim | 171ba4a | 2017-06-23 13:53:55 +0000 | [diff] [blame] | 85 | EXPECT_FLOAT_EQ(4.7f, F); // F should be unchanged |
Pavel Labath | ec000f4 | 2017-06-23 12:55:02 +0000 | [diff] [blame] | 86 | } |