<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 3, 2016 at 1:05 PM Zachary Turner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: zturner<br class="gmail_msg"><br>Date: Mon Oct  3 14:56:50 2016<br class="gmail_msg"><br>New Revision: 283138<br class="gmail_msg"><br><br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=283138&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=283138&view=rev</a><br class="gmail_msg"><br>Log:<br class="gmail_msg"><br>Add unit tests for StringSwitch.<br class="gmail_msg"></blockquote><div><br></div><div>Could this test coverage be a bit shorter? It would be good to make sure tests are focused and pulling their weight (mostly from a developer reading/comprehension perspective, I'm not so worried aobut test execution time - but making sure we know what the purpose of each test is, etc).<br><br>- Dave</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br class="gmail_msg"><br>Differential revision: <a href="https://reviews.llvm.org/D25205" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D25205</a><br class="gmail_msg"><br><br class="gmail_msg"><br>Added:<br class="gmail_msg"><br>    llvm/trunk/unittests/ADT/StringSwitchTest.cpp<br class="gmail_msg"><br>Modified:<br class="gmail_msg"><br>    llvm/trunk/unittests/ADT/CMakeLists.txt<br class="gmail_msg"><br><br class="gmail_msg"><br>Modified: llvm/trunk/unittests/ADT/CMakeLists.txt<br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/CMakeLists.txt?rev=283138&r1=283137&r2=283138&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/CMakeLists.txt?rev=283138&r1=283137&r2=283138&view=diff</a><br class="gmail_msg"><br>==============================================================================<br class="gmail_msg"><br>--- llvm/trunk/unittests/ADT/CMakeLists.txt (original)<br class="gmail_msg"><br>+++ llvm/trunk/unittests/ADT/CMakeLists.txt Mon Oct  3 14:56:50 2016<br class="gmail_msg"><br>@@ -56,6 +56,7 @@ set(ADTSources<br class="gmail_msg"><br>   StringExtrasTest.cpp<br class="gmail_msg"><br>   StringMapTest.cpp<br class="gmail_msg"><br>   StringRefTest.cpp<br class="gmail_msg"><br>+  StringSwitchTest.cpp<br class="gmail_msg"><br>   TinyPtrVectorTest.cpp<br class="gmail_msg"><br>   TripleTest.cpp<br class="gmail_msg"><br>   TwineTest.cpp<br class="gmail_msg"><br><br class="gmail_msg"><br>Added: llvm/trunk/unittests/ADT/StringSwitchTest.cpp<br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringSwitchTest.cpp?rev=283138&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringSwitchTest.cpp?rev=283138&view=auto</a><br class="gmail_msg"><br>==============================================================================<br class="gmail_msg"><br>--- llvm/trunk/unittests/ADT/StringSwitchTest.cpp (added)<br class="gmail_msg"><br>+++ llvm/trunk/unittests/ADT/StringSwitchTest.cpp Mon Oct  3 14:56:50 2016<br class="gmail_msg"><br>@@ -0,0 +1,107 @@<br class="gmail_msg"><br>+//===- llvm/unittest/ADT/StringSwitchTest.cpp - StringSwitch unit tests ---===//<br class="gmail_msg"><br>+//<br class="gmail_msg"><br>+//                     The LLVM Compiler Infrastructure<br class="gmail_msg"><br>+//<br class="gmail_msg"><br>+// This file is distributed under the University of Illinois Open Source<br class="gmail_msg"><br>+// License. See LICENSE.TXT for details.<br class="gmail_msg"><br>+//<br class="gmail_msg"><br>+//===----------------------------------------------------------------------===//<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+#include "llvm/ADT/StringSwitch.h"<br class="gmail_msg"><br>+#include "gtest/gtest.h"<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+using namespace llvm;<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+TEST(StringSwitchTest, Case) {<br class="gmail_msg"><br>+  auto Translate = [](StringRef S) {<br class="gmail_msg"><br>+    return llvm::StringSwitch<int>(S)<br class="gmail_msg"><br>+        .Case("0", 0)<br class="gmail_msg"><br>+        .Case("1", 1)<br class="gmail_msg"><br>+        .Case("2", 2)<br class="gmail_msg"><br>+        .Case("3", 3)<br class="gmail_msg"><br>+        .Case("4", 4)<br class="gmail_msg"><br>+        .Case("5", 5)<br class="gmail_msg"><br>+        .Case("6", 6)<br class="gmail_msg"><br>+        .Case("7", 7)<br class="gmail_msg"><br>+        .Case("8", 8)<br class="gmail_msg"><br>+        .Case("9", 9)<br class="gmail_msg"><br>+        .Case("A", 10)<br class="gmail_msg"><br>+        .Case("B", 11)<br class="gmail_msg"><br>+        .Case("C", 12)<br class="gmail_msg"><br>+        .Case("D", 13)<br class="gmail_msg"><br>+        .Case("E", 14)<br class="gmail_msg"><br>+        .Case("F", 15)<br class="gmail_msg"><br>+        .Default(-1);<br class="gmail_msg"><br>+  };<br class="gmail_msg"><br>+  EXPECT_EQ(1, Translate("1"));<br class="gmail_msg"><br>+  EXPECT_EQ(2, Translate("2"));<br class="gmail_msg"><br>+  EXPECT_EQ(11, Translate("B"));<br class="gmail_msg"><br>+  EXPECT_EQ(-1, Translate("b"));<br class="gmail_msg"><br>+  EXPECT_EQ(-1, Translate(""));<br class="gmail_msg"><br>+  EXPECT_EQ(-1, Translate("Test"));<br class="gmail_msg"><br>+}<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+TEST(StringSwitchTest, StartsWith) {<br class="gmail_msg"><br>+  auto Translate = [](StringRef S) {<br class="gmail_msg"><br>+    return llvm::StringSwitch<std::function<int(int, int)>>(S)<br class="gmail_msg"><br>+        .StartsWith("add", [](int X, int Y) { return X + Y; })<br class="gmail_msg"><br>+        .StartsWith("sub", [](int X, int Y) { return X - Y; })<br class="gmail_msg"><br>+        .StartsWith("mul", [](int X, int Y) { return X * Y; })<br class="gmail_msg"><br>+        .StartsWith("div", [](int X, int Y) { return X / Y; })<br class="gmail_msg"><br>+        .Default([](int X, int Y) { return 0; });<br class="gmail_msg"><br>+  };<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  EXPECT_EQ(15, Translate("adder")(10, 5));<br class="gmail_msg"><br>+  EXPECT_EQ(5, Translate("subtracter")(10, 5));<br class="gmail_msg"><br>+  EXPECT_EQ(50, Translate("multiplier")(10, 5));<br class="gmail_msg"><br>+  EXPECT_EQ(2, Translate("divider")(10, 5));<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  EXPECT_EQ(0, Translate("nothing")(10, 5));<br class="gmail_msg"><br>+  EXPECT_EQ(0, Translate("ADDER")(10, 5));<br class="gmail_msg"><br>+}<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+TEST(StringSwitchTest, EndsWith) {<br class="gmail_msg"><br>+  enum class Suffix { Possible, PastTense, Process, InProgressAction, Unknown };<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  auto Translate = [](StringRef S) {<br class="gmail_msg"><br>+    return llvm::StringSwitch<Suffix>(S)<br class="gmail_msg"><br>+        .EndsWith("able", Suffix::Possible)<br class="gmail_msg"><br>+        .EndsWith("ed", Suffix::PastTense)<br class="gmail_msg"><br>+        .EndsWith("ation", Suffix::Process)<br class="gmail_msg"><br>+        .EndsWith("ing", Suffix::InProgressAction)<br class="gmail_msg"><br>+        .Default(Suffix::Unknown);<br class="gmail_msg"><br>+  };<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::Possible, Translate("optimizable"));<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::PastTense, Translate("optimized"));<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::Process, Translate("optimization"));<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::InProgressAction, Translate("optimizing"));<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::Unknown, Translate("optimizer"));<br class="gmail_msg"><br>+  EXPECT_EQ(Suffix::Unknown, Translate("OPTIMIZABLE"));<br class="gmail_msg"><br>+}<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+TEST(StringSwitchTest, Cases) {<br class="gmail_msg"><br>+  enum class OSType { Windows, Linux, Unknown };<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  auto Translate = [](StringRef S) {<br class="gmail_msg"><br>+    return llvm::StringSwitch<OSType>(S)<br class="gmail_msg"><br>+        .Cases("wind\0ws", "win32", "winnt", OSType::Windows)<br class="gmail_msg"><br>+        .Cases("linux", "unix", "*nix", "posix", OSType::Linux)<br class="gmail_msg"><br>+        .Default(OSType::Unknown);<br class="gmail_msg"><br>+  };<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Windows, Translate(llvm::StringRef("wind\0ws", 7)));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Windows, Translate("win32"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Windows, Translate("winnt"));<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Linux, Translate("linux"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Linux, Translate("unix"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Linux, Translate("*nix"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Linux, Translate("posix"));<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  // Note that the whole null-terminator embedded string is required for the<br class="gmail_msg"><br>+  // case to match.<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Unknown, Translate("wind"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Unknown, Translate("Windows"));<br class="gmail_msg"><br>+  EXPECT_EQ(OSType::Unknown, Translate(""));<br class="gmail_msg"><br>+}<br class="gmail_msg"><br><br class="gmail_msg"><br><br class="gmail_msg"><br>_______________________________________________<br class="gmail_msg"><br>llvm-commits mailing list<br class="gmail_msg"><br><a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg"><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg"><br></blockquote></div></div>