X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Ftest%2FFormatTest.cpp;h=5a342226fbe678b7ee32cda005af041e9b1a94ca;hb=0ef8ce0d60996be2467fd4ccff324d4786243f27;hp=4385401be765425cf428aa975c1f1163d72765a8;hpb=b0131bea126f9febe31c825fc4cd11d5d8996304;p=folly.git diff --git a/folly/test/FormatTest.cpp b/folly/test/FormatTest.cpp index 4385401b..5a342226 100644 --- a/folly/test/FormatTest.cpp +++ b/folly/test/FormatTest.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,7 @@ #include -#include -#include +#include #include @@ -105,6 +104,13 @@ TEST(Format, Simple) { EXPECT_EQ("hello ", sformat("{:<7}", "hello")); EXPECT_EQ(" hello", sformat("{:>7}", "hello")); + EXPECT_EQ(" hi", sformat("{:>*}", 4, "hi")); + EXPECT_EQ(" hi!", sformat("{:*}{}", 3, "", "hi!")); + EXPECT_EQ(" 123", sformat("{:*}", 7, 123)); + EXPECT_EQ("123 ", sformat("{:<*}", 7, 123)); + EXPECT_EQ("----<=>----", sformat("{:-^*}", 11, "<=>")); + EXPECT_EQ("+++456+++", sformat("{2:+^*0}", 9, "unused", 456)); + std::vector v1 {10, 20, 30}; EXPECT_EQ("0020", sformat("{0[1]:04}", v1)); EXPECT_EQ("0020", svformat("{1:04}", v1)); @@ -120,20 +126,22 @@ TEST(Format, Simple) { EXPECT_EQ("0042", sformat("{0[3]:04}", defaulted(v2, 42))); EXPECT_EQ("0042", svformat("{3:04}", defaulted(v2, 42))); - const int p[] = {10, 20, 30}; - const int* q = p; - EXPECT_EQ("0020", sformat("{0[1]:04}", p)); - EXPECT_EQ("0020", svformat("{1:04}", p)); - EXPECT_EQ("0020", sformat("{0[1]:04}", q)); - EXPECT_EQ("0020", svformat("{1:04}", q)); - EXPECT_NE("", sformat("{}", q)); - - EXPECT_EQ("0x", sformat("{}", p).substr(0, 2)); - EXPECT_EQ("10", svformat("{}", p)); - EXPECT_EQ("0x", sformat("{}", q).substr(0, 2)); - EXPECT_EQ("10", svformat("{}", q)); - q = nullptr; - EXPECT_EQ("(null)", sformat("{}", q)); + { + const int p[] = { 10, 20, 30 }; + const int* q = p; + EXPECT_EQ("0020", sformat("{0[1]:04}", p)); + EXPECT_EQ("0020", svformat("{1:04}", p)); + EXPECT_EQ("0020", sformat("{0[1]:04}", q)); + EXPECT_EQ("0020", svformat("{1:04}", q)); + EXPECT_NE("", sformat("{}", q)); + + EXPECT_EQ("0x", sformat("{}", p).substr(0, 2)); + EXPECT_EQ("10", svformat("{}", p)); + EXPECT_EQ("0x", sformat("{}", q).substr(0, 2)); + EXPECT_EQ("10", svformat("{}", q)); + q = nullptr; + EXPECT_EQ("(null)", sformat("{}", q)); + } std::map m { {10, "hello"}, {20, "world"} }; EXPECT_EQ("worldXX", sformat("{[20]:X<7}", m)); @@ -194,7 +202,6 @@ TEST(Format, Simple) { } TEST(Format, Float) { - double d = 1; EXPECT_EQ("1", sformat("{}", 1.0)); EXPECT_EQ("0.1", sformat("{}", 0.1)); EXPECT_EQ("0.01", sformat("{}", 0.01)); @@ -420,7 +427,6 @@ TEST(Format, OutOfBounds) { } TEST(Format, BogusFormatString) { - // format() will crash the program if the format string is invalid. EXPECT_FORMAT_ERROR(sformat("}"), "single '}' in format string"); EXPECT_FORMAT_ERROR(sformat("foo}bar"), "single '}' in format string"); EXPECT_FORMAT_ERROR(sformat("foo{bar"), "missing ending '}'"); @@ -429,11 +435,26 @@ TEST(Format, BogusFormatString) { EXPECT_FORMAT_ERROR(sformat("{1.3}", 0, 1, 2), "index not allowed"); EXPECT_FORMAT_ERROR(sformat("{0} {} {1}", 0, 1, 2), "may not have both default and explicit arg indexes"); + EXPECT_FORMAT_ERROR(sformat("{:*}", 1.2), + "dynamic field width argument must be integral"); + EXPECT_FORMAT_ERROR(sformat("{} {:*}", "hi"), + "argument index out of range, max=1"); + EXPECT_FORMAT_ERROR( + sformat("{:*0}", 12, "ok"), + "cannot provide width arg index without value arg index" + ); + EXPECT_FORMAT_ERROR( + sformat("{0:*}", 12, "ok"), + "cannot provide value arg index without width arg index" + ); + + std::vector v{1, 2, 3}; + EXPECT_FORMAT_ERROR(svformat("{:*}", v), + "dynamic field width not supported in vformat()"); // This one fails in detail::enforceWhitespace(), which throws // std::range_error - EXPECT_THROW_STR(sformat("{0[test}"), std::range_error, - "Non-whitespace: ["); + EXPECT_THROW_STR(sformat("{0[test}"), std::range_error, "Non-whitespace"); } template @@ -487,9 +508,3 @@ TEST(Format, Extending) { "another formatter"), "Extending {a {formatter}} in {another formatter}"); } - -int main(int argc, char *argv[]) { - testing::InitGoogleTest(&argc, argv); - gflags::ParseCommandLineFlags(&argc, &argv, true); - return RUN_ALL_TESTS(); -}