Make printers use singular noun for a single element
authorJonathan Wakely <jwakely@redhat.com>
Wed, 14 Dec 2016 16:07:29 +0000 (16:07 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 14 Dec 2016 16:07:29 +0000 (16:07 +0000)
* python/libstdcxx/v6/printers.py (num_elements): New function.
(StdMapPrinter.to_string, StdSetPrinter.to_string)
(StdDequePrinter.to_string, Tr1UnorderedSetPrinter.to_string)
(Tr1UnorderedMapPrinter.to_string): Use num_elements.
* testsuite/libstdc++-prettyprinters/cxx11.cc: Adjust expected results
to use singular noun when there is only one element.
* testsuite/libstdc++-prettyprinters/debug.cc: Likewise.
* testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/simple.cc: Likewise.
* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/tr1.cc: Likewise.

From-SVN: r243652

libstdc++-v3/ChangeLog
libstdc++-v3/python/libstdcxx/v6/printers.py
libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/tr1.cc

index 635629b78378fdac184138aea261e6be526d9432..5d7563f602124f60d266f80f6f25145a3159502c 100644 (file)
@@ -1,5 +1,17 @@
 2016-12-14  Jonathan Wakely  <jwakely@redhat.com>
 
+       * python/libstdcxx/v6/printers.py (num_elements): New function.
+       (StdMapPrinter.to_string, StdSetPrinter.to_string)
+       (StdDequePrinter.to_string, Tr1UnorderedSetPrinter.to_string)
+       (Tr1UnorderedMapPrinter.to_string): Use num_elements.
+       * testsuite/libstdc++-prettyprinters/cxx11.cc: Adjust expected results
+       to use singular noun when there is only one element.
+       * testsuite/libstdc++-prettyprinters/debug.cc: Likewise.
+       * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise.
+       * testsuite/libstdc++-prettyprinters/simple.cc: Likewise.
+       * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
+       * testsuite/libstdc++-prettyprinters/tr1.cc: Likewise.
+
        PR libstdc++/59170
        * python/libstdcxx/v6/printers.py (StdDebugIteratorPrinter): Use
        _M_sequence and _M_version to detect invalid iterators.
index 8ac4a3757cb12bb7e28052e274ec7039a8db6001..3a111d793cb40e22e8ebd5eeca90db6ce36e1cab 100644 (file)
@@ -508,6 +508,10 @@ class StdDebugIteratorPrinter:
         itype = self.val.type.template_argument(0)
         return self.val.cast(itype)
 
+def num_elements(num):
+    """Return either "1 element" or "N elements" depending on the argument."""
+    return '1 element' if num == 1 else '%d elements' % num
+
 class StdMapPrinter:
     "Print a std::map or std::multimap"
 
@@ -539,8 +543,8 @@ class StdMapPrinter:
         self.val = val
 
     def to_string (self):
-        return '%s with %d elements' % (self.typename,
-                                        len (RbtreeIterator (self.val)))
+        return '%s with %s' % (self.typename,
+                               num_elements(len(RbtreeIterator (self.val))))
 
     def children (self):
         rep_type = find_type(self.val.type, '_Rep_type')
@@ -579,8 +583,8 @@ class StdSetPrinter:
         self.val = val
 
     def to_string (self):
-        return '%s with %d elements' % (self.typename,
-                                        len (RbtreeIterator (self.val)))
+        return '%s with %s' % (self.typename,
+                               num_elements(len(RbtreeIterator (self.val))))
 
     def children (self):
         rep_type = find_type(self.val.type, '_Rep_type')
@@ -681,7 +685,7 @@ class StdDequePrinter:
 
         size = self.buffer_size * delta_n + delta_s + delta_e
 
-        return '%s with %d elements' % (self.typename, long (size))
+        return '%s with %s' % (self.typename, num_elements(long(size)))
 
     def children(self):
         start = self.val['_M_impl']['_M_start']
@@ -795,7 +799,8 @@ class Tr1UnorderedSetPrinter:
         return self.val['_M_h']
 
     def to_string (self):
-        return '%s with %d elements' % (self.typename, self.hashtable()['_M_element_count'])
+        count = self.hashtable()['_M_element_count']
+        return '%s with %s' % (self.typename, num_elements(count))
 
     @staticmethod
     def format_count (i):
@@ -820,7 +825,8 @@ class Tr1UnorderedMapPrinter:
         return self.val['_M_h']
 
     def to_string (self):
-        return '%s with %d elements' % (self.typename, self.hashtable()['_M_element_count'])
+        count = self.hashtable()['_M_element_count']
+        return '%s with %s' % (self.typename, num_elements(count))
 
     @staticmethod
     def flatten (list):
index 780a4e4387991ffda63660076e219339919c5405..e02997a5f798ce11f021360bb1cf73fd81dfade6 100644 (file)
@@ -113,15 +113,15 @@ main()
 
   std::unordered_set<int> uos;
   uos.insert(5);
-// { dg-final { note-test uos {std::unordered_set with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test uos {std::unordered_set with 1 element = {[0] = 5}} } }
   std::unordered_set<int> &ruos = uos;
-// { dg-final { note-test ruos {std::unordered_set with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test ruos {std::unordered_set with 1 element = {[0] = 5}} } }
 
   std::unordered_multiset<int> uoms;
   uoms.insert(5);
-// { dg-final { note-test uoms {std::unordered_multiset with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test uoms {std::unordered_multiset with 1 element = {[0] = 5}} } }
   std::unordered_multiset<int> &ruoms = uoms;
-// { dg-final { note-test ruoms {std::unordered_multiset with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test ruoms {std::unordered_multiset with 1 element = {[0] = 5}} } }
 
   std::unique_ptr<datum> uptr (new datum);
   uptr->s = "hi bob";
index cff71132ceca60442166af2cbfdb879e3bac8272..833b557b4f17346b7e7add5762befc7a5315f997 100644 (file)
@@ -66,7 +66,7 @@ main()
 
   std::map<std::string, int> mp;
   mp["zardoz"] = 23;
-// { dg-final { note-test mp {std::__debug::map with 1 elements = {["zardoz"] = 23}} } }
+// { dg-final { note-test mp {std::__debug::map with 1 element = {["zardoz"] = 23}} } }
 
   std::map<std::string, int>::iterator mpiter = mp.begin();
 // { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
index 65f187c2ce331243eace2c18cc6866f1ddb8e46f..27c3bbf56c9c33bf5db19e77ceb736fe0914049a 100644 (file)
@@ -43,13 +43,13 @@ main()
 // { dg-final { note-test *flstciter {"dee"}} }
 
   std::unordered_map<std::string, int> um{ {"zardoz", 23} };
-// { dg-final { note-test um {std::__debug::unordered_map with 1 elements = {["zardoz"] = 23}} } }
+// { dg-final { note-test um {std::__debug::unordered_map with 1 element = {["zardoz"] = 23}} } }
 
   std::unordered_map<std::string, int>::iterator umiter = um.begin();
 // { dg-final { note-test umiter->first {"zardoz"} } }
 
   std::unordered_set<std::string> us{"barrel"};
-// { dg-final { note-test us {std::__debug::unordered_set with 1 elements = {[0] = "barrel"}} } }
+// { dg-final { note-test us {std::__debug::unordered_set with 1 element = {[0] = "barrel"}} } }
 
   std::unordered_set<std::string>::const_iterator usciter = us.begin();
 // { dg-final { note-test *usciter {"barrel"} } }
index 5f98b259be1f687e0e3cc333a433f4746e3e1fe8..fb8e0d754e68e858a8071a4ecaf24181b2d523c3 100644 (file)
@@ -68,7 +68,7 @@ main()
 
   std::map<std::string, int> mp;
   mp["zardoz"] = 23;
-// { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } }
+// { dg-final { note-test mp {std::map with 1 element = {["zardoz"] = 23}} } }
 
   std::map<std::string, int>::iterator mpiter = mp.begin();
 // { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
index 97a57efba3d196ac98a8f3fcc4bbbd8bf8d103db..9e230e3d4d945ee4c8a97508cc00b62769d2ec5d 100644 (file)
@@ -68,7 +68,7 @@ main()
 
   std::map<std::string, int> mp;
   mp["zardoz"] = 23;
-// { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } }
+// { dg-final { note-test mp {std::map with 1 element = {["zardoz"] = 23}} } }
 
   std::map<std::string, int>::iterator mpiter = mp.begin();
 // { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
index 52dca4d59f43b04aff0c87e61956eb9e5ca249c3..609b1f0c634060dfe6992b8f53ecc7aadfe717a8 100644 (file)
@@ -71,11 +71,11 @@ main()
 
   std::tr1::unordered_set<int> uos;
   uos.insert(5);
-// { dg-final { note-test uos {std::tr1::unordered_set with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test uos {std::tr1::unordered_set with 1 element = {[0] = 5}} } }
 
   std::tr1::unordered_multiset<int> uoms;
   uoms.insert(5);
-// { dg-final { note-test uoms {std::tr1::unordered_multiset with 1 elements = {[0] = 5}} } }
+// { dg-final { note-test uoms {std::tr1::unordered_multiset with 1 element = {[0] = 5}} } }
 
   placeholder(""); // Mark SPOT
   use(eum);