Browse Source

New metrics group: std.code.member.* - counting of classes, fields, globals, etc.

avkonst 10 years ago
parent
commit
e6eec7b8d3

+ 1 - 1
mainline/doc/home.html

@@ -392,7 +392,7 @@ class WeekClass {
                 	todo markers are lost in the source code. The metric could make these 'lost' issues visible.</td>
               </tr>
               <tr>
-                <td>std.code.mi.simple</td>
+                <td>std.code.maintindex.simple</td>
                 <td>Simple variant of maintainability index - a measure of maintainability.
                 	It uses std.code.lines:code and std.code.complexity:cyclomatic
                 	metrics to evaluate level of maintainability. Lower value of this index indicates

+ 3 - 1
mainline/ext/std/code/cpp.py

@@ -81,7 +81,7 @@ class CppCodeParser(object):
                                                                       # and before '(', it is not detected
                                                                       # LIMITATION: if there are comments within operator definition,
                                                                       # if may be not detected
-                | ((?P<block_type>class|struct|namespace)             # Match C++ class or struct
+                | ((?P<block_type>\bclass|\bstruct|\bunion|\bnamespace)             # Match C++ class or struct
                     (?P<block_name>((\s+[a-zA-Z_][a-zA-Z0-9_]*)|(?=\s*[{])))) # noname is supported, symbol '{' is not consumed
                                                                       # LIMITATION: if there are comments between keyword and name,
                                                                       # it is not detected
@@ -141,6 +141,8 @@ class CppCodeParser(object):
                     return mpp.api.Region.T.CLASS
                 elif named_type == "struct":
                     return mpp.api.Region.T.STRUCT
+                elif named_type == "union":
+                    return mpp.api.Region.T.STRUCT
                 elif named_type == "namespace":
                     return mpp.api.Region.T.NAMESPACE
                 elif named_type == "__global__":

+ 1 - 1
mainline/ext/std/code/cs.py

@@ -85,7 +85,7 @@ class CsCodeParser(object):
                                                                       # if may be not detected
                                                                       # LIMITATION: if there are comments after set|get keyword,
                                                                       # if may be not detected
-                | ((?P<block_type>class|struct|namespace|interface)   # Match class or struct or interface or namespace
+                | ((?P<block_type>\bclass|\bstruct|\bnamespace|\binterface)   # Match class or struct or interface or namespace
                     (?P<block_name>(\s+[a-zA-Z_][a-zA-Z0-9_]*)([.][a-zA-Z_][a-zA-Z0-9_]*)*))
                                                                       # NOTE: noname instances are impossible in C#
                                                                       # NOTE: names can have sub-names separated by dots

+ 1 - 1
mainline/ext/std/code/java.py

@@ -66,7 +66,7 @@ class JavaCodeParser(object):
                                                                       # NOTE: Java may include $ in the name
                                                                       # LIMITATION: if there are comments after function name
                                                                       # and before '(', it is not detected
-                | ((?P<block_type>class|interface)                    # Match class or namespace
+                | ((?P<block_type>\bclass|\binterface)                    # Match class or namespace
                     (?P<block_name>(\s+[_$a-zA-Z][_$a-zA-Z0-9]*)))
                                                                       # NOTE: noname instances are impossible in Java
                                                                       # LIMITATION: if there are comments between keyword and name,

+ 1 - 1
mainline/ext/std/code/member.ini

@@ -24,4 +24,4 @@ module:  member
 class:   Plugin
 depends: None
 actions: collect
-enabled: False
+enabled: True

+ 79 - 18
mainline/ext/std/code/member.py

@@ -46,11 +46,15 @@ class Plugin(mpp.api.Plugin,
             action="store_true", default=False,
             help="Enables collection of number of interfaces defined "
             "per any region [default: %default]")
+        parser.add_option("--std.code.member.types", "--scmt",
+            action="store_true", default=False,
+            help="Enables collection of number of types (classes, structs "
+            "or interface) defined per any region [default: %default]")
         parser.add_option("--std.code.member.methods", "--scmm",
             action="store_true", default=False,
             help="Enables collection of number of methods (functions) defined "
             "per any region [default: %default]")
-        parser.add_option("--std.code.member.namespaces", "--scmn",
+        parser.add_option("--std.code.member.namespaces", "--scmnss",
             action="store_true", default=False,
             help="Enables collection of number of namespaces defined "
             "globally and enclosed (sub-namespaces) [default: %default]")
@@ -61,45 +65,102 @@ class Plugin(mpp.api.Plugin,
         self.is_active_classes = options.__dict__['std.code.member.classes']
         self.is_active_structs = options.__dict__['std.code.member.structs']
         self.is_active_interfaces = options.__dict__['std.code.member.interfaces']
+        self.is_active_types = options.__dict__['std.code.member.types']
         self.is_active_methods = options.__dict__['std.code.member.methods']
-        self.is_active_namespaces = options.__dict__['std.code.member.namspaces']
+        self.is_active_namespaces = options.__dict__['std.code.member.namespaces']
     
     def initialize(self):
         # counts fields and properties with default getter/setter
         pattern_to_search_cs = re.compile(
-            r'''([_a-zA-Z][_a-zA-Z0-9]*\s+[_a-zA-Z][_a-zA-Z0-9])\s*([=;]|[{]\s*(public\s+|private\s+|protected\s+|internal\s+)?(get|set)\s*[;])''')
-        pattern_to_search_cpp_java = re.compile(
+            r'''([_a-zA-Z][_a-zA-Z0-9]*\s+[_a-zA-Z][_a-zA-Z0-9])\s*([=;]|'''
+            r'''[{]\s*(public\s+|private\s+|protected\s+|internal\s+)?(get|set)\s*[;]\s*[a-z \t\r\n]*[}])''')
+        pattern_to_search_cpp = re.compile(
             r'''([_a-zA-Z][_a-zA-Z0-9]*\s+[_a-zA-Z][_a-zA-Z0-9])\s*[=;]''')
+        pattern_to_search_java = re.compile(
+            r'''([_$a-zA-Z][_$a-zA-Z0-9]*\s+[_$a-zA-Z][_$a-zA-Z0-9])\s*[=;]''')
         self.declare_metric(self.is_active_fields,
-                            self.Field('fields', int, _zero=True),
+                            self.Field('fields', int, non_zero=True),
                             {
-                             'std.code.java': pattern_to_search_cpp_java,
-                             'std.code.cpp': pattern_to_search_cpp_java,
+                             'std.code.java': pattern_to_search_java,
+                             'std.code.cpp': pattern_to_search_cpp,
                              'std.code.cs': pattern_to_search_cs,
                             },
                             marker_type_mask=mpp.api.Marker.T.CODE,
                             region_type_mask=mpp.api.Region.T.CLASS |
                             mpp.api.Region.T.STRUCT | mpp.api.Region.T.INTERFACE)
-        self.declare_metric(self.is_active_fields,
-                            self.Field('globals', int, _zero=True),
+        self.declare_metric(self.is_active_globals,
+                            self.Field('globals', int, non_zero=True),
                             {
-                             'std.code.java': pattern_to_search_cpp_java,
-                             'std.code.cpp': pattern_to_search_cpp_java,
+                             'std.code.java': pattern_to_search_java,
+                             'std.code.cpp': pattern_to_search_cpp,
                              'std.code.cs': pattern_to_search_cs,
                             },
                             marker_type_mask=mpp.api.Marker.T.CODE,
                             region_type_mask=mpp.api.Region.T.GLOBAL |
                             mpp.api.Region.T.NAMESPACE)
+        self.declare_metric(self.is_active_classes,
+                            self.Field('classes', int, non_zero=True),
+                            (None, self.ClassesCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
+        self.declare_metric(self.is_active_structs,
+                            self.Field('structs', int, non_zero=True),
+                            (None, self.StructCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
+        self.declare_metric(self.is_active_interfaces,
+                            self.Field('interfaces', int, non_zero=True),
+                            (None, self.InterfaceCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
+        self.declare_metric(self.is_active_types,
+                            self.Field('types', int, non_zero=True),
+                            (None, self.TypeCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
+        self.declare_metric(self.is_active_methods,
+                            self.Field('methods', int, non_zero=True),
+                            (None, self.MethodCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
+        self.declare_metric(self.is_active_namespaces,
+                            self.Field('namespaces', int, non_zero=True),
+                            (None, self.NamespaceCounter),
+                            exclude_subregions=False,
+                            merge_markers=True)
         
         super(Plugin, self).initialize(fields=self.get_fields())
         
         if self.is_active() == True:
             self.subscribe_by_parents_interface(mpp.api.ICode)
 
-    class NumbersCounter(mpp.api.MetricPluginMixin.IterIncrementCounter):
-        def increment(self, match):
-            if (match.group(0).startswith('const') or
-                (self.plugin.is_active_numbers_simplier == True and
-                 match.group(0) in ['0', '1', '-1', '+1'])):
-                return 0
-            return 1
+    class ClassesCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.CLASS, region_id=self.region.get_id()))
+
+    class StructCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.STRUCT, region_id=self.region.get_id()))
+
+    class InterfaceCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.INTERFACE, region_id=self.region.get_id()))
+
+    class TypeCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.CLASS | mpp.api.Region.T.STRUCT |
+                 mpp.api.Region.T.INTERFACE, region_id=self.region.get_id()))
+
+    class MethodCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.FUNCTION, region_id=self.region.get_id()))
+
+    class NamespaceCounter(mpp.api.MetricPluginMixin.PlainCounter):
+        def count(self, marker, pattern_to_search):
+            self.result = sum(1 for unused in self.data.iterate_regions(
+                filter_group=mpp.api.Region.T.NAMESPACE, region_id=self.region.get_id()))

+ 11 - 5
mainline/mpp/api.py

@@ -268,7 +268,7 @@ class Region(LoadableData):
 
     def _register_subregion_id(self, child_id):
         self.children.append(child_id)
-
+        
 class Marker(object):
     class T(object):
         NONE            = 0x00
@@ -380,11 +380,17 @@ class FileData(LoadableData):
         self.load_regions()
         return self.regions[region_id - 1]
     
-    def iterate_regions(self, filter_group = Region.T.ANY):
+    def iterate_regions(self, filter_group = Region.T.ANY, region_id = None):
         self.load_regions()
-        for each in self.regions:
-            if each.group & filter_group:
-                yield each
+        if region_id == None:
+            for each in self.regions:
+                if each.group & filter_group:
+                    yield each
+        else:
+            for sub_id in self.get_region(region_id).iterate_subregion_ids():
+                each = self.get_region(sub_id)
+                if each.group & filter_group:
+                    yield each
 
     def are_regions_loaded(self):
         return self.regions != None

+ 22 - 0
mainline/tests/general/test_basic.py

@@ -358,5 +358,27 @@ class Test(tests.common.TestCase):
         runner = tests.common.ToolRunner('view', prefix='nozeros')
         self.assertExec(runner.run())
 
+    def test_std_member_metrics(self):
+
+        runner = tests.common.ToolRunner('collect',
+                                         ['--std.code.member.fields',
+                                          '--std.code.member.globals',
+                                          '--std.code.member.classes',
+                                          '--std.code.member.structs',
+                                          '--std.code.member.interfaces',
+                                          '--std.code.member.types',
+                                          '--std.code.member.methods',
+                                          '--std.code.member.namespaces'])
+        self.assertExec(runner.run())
+
+        runner = tests.common.ToolRunner('view',
+                                         ['--nest-regions', '--format=txt'],
+                                         prefix='nest_per_file',
+                                         dirs_list=['./simple.cpp'])
+        self.assertExec(runner.run())
+
+        runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
+        self.assertExec(runner.run())
+
 if __name__ == '__main__':
     unittest.main()

+ 27 - 0
mainline/tests/general/test_basic/test_help_collect_default_stdout.gold.txt

@@ -74,6 +74,33 @@ Options:
   --std.code.magic.numbers.simplier, --scmns
                         Is set, 0, -1 and 1 numbers are not counted in
                         'std.code.magic.numbers' metric [default: False]
+  --std.code.member.fields, --scmf
+                        Enables collection of number of data members / fields
+                        per classes, structs and interfaces [default: False]
+  --std.code.member.globals, --scmg
+                        Enables collection of number of global variables /
+                        fields per global regions and namespaces [default:
+                        False]
+  --std.code.member.classes, --scmc
+                        Enables collection of number of classes defined per
+                        any region [default: False]
+  --std.code.member.structs, --scms
+                        Enables collection of number of structs defined per
+                        any region [default: False]
+  --std.code.member.interfaces, --scmi
+                        Enables collection of number of interfaces defined per
+                        any region [default: False]
+  --std.code.member.types, --scmt
+                        Enables collection of number of types (classes,
+                        structs or interface) defined per any region [default:
+                        False]
+  --std.code.member.methods, --scmm
+                        Enables collection of number of methods (functions)
+                        defined per any region [default: False]
+  --std.code.member.namespaces, --scmnss
+                        Enables collection of number of namespaces defined
+                        globally and enclosed (sub-namespaces) [default:
+                        False]
   --std.code.maintindex.simple, --scmis
                         Enables collection of simple maintainability index
                         metric. It uses std.code.line:code,

+ 0 - 0
mainline/tests/general/test_basic/test_std_member_metrics_collect_default_stdout.gold.txt


+ 157 - 0
mainline/tests/general/test_basic/test_std_member_metrics_view_nest_per_file_stdout.gold.txt

@@ -0,0 +1,157 @@
+./simple.cpp:0: info: Metrics per '__global__' region
+	Region name    : __global__
+	Region type    : global
+	Offsets        : 0-697
+	Line numbers   : 1-71
+	Modified       : None
+	std.code.member:namespaces: 1
+
+.   ./simple.cpp:4: info: Metrics per 'hmm' region
+    	Region name    : hmm
+    	Region type    : namespace
+    	Offsets        : 2-696
+    	Line numbers   : 3-70
+    	Modified       : None
+    	std.code.member:classes: 1
+    	std.code.member:types: 1
+
+.   .   ./simple.cpp:9: info: Metrics per 'A' region
+        	Region name    : A
+        	Region type    : class
+        	Offsets        : 94-692
+        	Line numbers   : 9-68
+        	Modified       : None
+        	std.code.member:methods: 4
+
+.   .   .   ./simple.cpp:12: info: Metrics per 'A' region
+            	Region name    : A
+            	Region type    : function
+            	Offsets        : 106-252
+            	Line numbers   : 12-23
+            	Modified       : None
+
+.   .   .   ./simple.cpp:26: info: Metrics per 'func' region
+            	Region name    : func
+            	Region type    : function
+            	Offsets        : 256-405
+            	Line numbers   : 26-40
+            	Modified       : None
+            	std.code.member:classes: 1
+            	std.code.member:types: 1
+
+.   .   .   .   ./simple.cpp:28: info: Metrics per 'embeded' region
+                	Region name    : embeded
+                	Region type    : class
+                	Offsets        : 285-391
+                	Line numbers   : 28-38
+                	Modified       : None
+                	std.code.member:methods: 1
+
+.   .   .   .   .   ./simple.cpp:30: info: Metrics per 'embeded' region
+                    	Region name    : embeded
+                    	Region type    : function
+                    	Offsets        : 306-387
+                    	Line numbers   : 30-37
+                    	Modified       : None
+
+.   .   .   ./simple.cpp:42: info: Metrics per 'func_to_be_removed_in_new_sources' region
+            	Region name    : func_to_be_removed_in_new_sources
+            	Region type    : function
+            	Offsets        : 408-596
+            	Line numbers   : 42-56
+            	Modified       : None
+            	std.code.member:classes: 1
+            	std.code.member:types: 1
+
+.   .   .   .   ./simple.cpp:44: info: Metrics per 'embeded' region
+                	Region name    : embeded
+                	Region type    : class
+                	Offsets        : 466-577
+                	Line numbers   : 44-54
+                	Modified       : None
+                	std.code.member:methods: 1
+
+.   .   .   .   .   ./simple.cpp:46: info: Metrics per 'embeded' region
+                    	Region name    : embeded
+                    	Region type    : function
+                    	Offsets        : 487-573
+                    	Line numbers   : 46-53
+                    	Modified       : None
+
+.   .   .   ./simple.cpp:58: info: Metrics per 'never' region
+            	Region name    : never
+            	Region type    : function
+            	Offsets        : 599-669
+            	Line numbers   : 58-65
+            	Modified       : None
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:methods' metric
+	Average        : 2.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 4
+	Total          : 6.0
+	Distribution   : 3 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.667 : 0.667 : 2	|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             4 : 0.333 : 1.000 : 1	|||||||||||||||||||||||||||||||||
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:globals' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:fields' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:interfaces' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:classes' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 3.0
+	Distribution   : 3 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 3	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:namespaces' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 1.0
+	Distribution   : 1 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 1	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:structs' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./simple.cpp:: info: Overall metrics for 'std.code.member:types' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 3.0
+	Distribution   : 3 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 3	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+

+ 74 - 0
mainline/tests/general/test_basic/test_std_member_metrics_view_txt_stdout.gold.txt

@@ -0,0 +1,74 @@
+./:: info: Overall metrics for 'std.code.member:methods' metric
+	Average        : 1.6 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 4
+	Total          : 8.0
+	Distribution   : 5 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.800 : 0.800 : 4	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             4 : 0.200 : 1.000 : 1	||||||||||||||||||||
+
+./:: info: Overall metrics for 'std.code.member:globals' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./:: info: Overall metrics for 'std.code.member:fields' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./:: info: Overall metrics for 'std.code.member:interfaces' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./:: info: Overall metrics for 'std.code.member:classes' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 4.0
+	Distribution   : 4 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 4	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./:: info: Overall metrics for 'std.code.member:namespaces' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 2.0
+	Distribution   : 2 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 2	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./:: info: Overall metrics for 'std.code.member:structs' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./:: info: Overall metrics for 'std.code.member:types' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 4.0
+	Distribution   : 4 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 4	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./:: info: Directory content:
+	File           : file_deleted_in_new_sources.cpp
+	File           : simple.cpp
+
+

+ 23 - 0
mainline/tests/system/test_boost_parts.py

@@ -134,6 +134,29 @@ class Test(tests.common.TestCase):
                                          exit_code=0)
         self.assertExec(runner.run())
 
+
+    def test_std_member_metrics(self):
+
+        runner = tests.common.ToolRunner('collect',
+                                         ['--std.code.member.fields',
+                                          '--std.code.member.globals',
+                                          '--std.code.member.classes',
+                                          '--std.code.member.structs',
+                                          '--std.code.member.interfaces',
+                                          '--std.code.member.types',
+                                          '--std.code.member.methods',
+                                          '--std.code.member.namespaces'])
+        self.assertExec(runner.run())
+
+        runner = tests.common.ToolRunner('view',
+                                         ['--nest-regions', '--format=txt'],
+                                         prefix='nest_per_file',
+                                         dirs_list=['./interprocess/detail/win32_api.hpp'])
+        self.assertExec(runner.run())
+
+        runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
+        self.assertExec(runner.run())
+
 if __name__ == '__main__':
     unittest.main()
     

+ 2 - 0
mainline/tests/system/test_boost_parts/test_std_member_metrics_collect_default_stdout.gold.txt

@@ -0,0 +1,2 @@
+./interprocess/detail/os_file_functions.hpp:697: warning: Non-matching opening bracket '{' detected.
+

File diff suppressed because it is too large
+ 1137 - 0
mainline/tests/system/test_boost_parts/test_std_member_metrics_view_nest_per_file_stdout.gold.txt


+ 123 - 0
mainline/tests/system/test_boost_parts/test_std_member_metrics_view_txt_stdout.gold.txt

@@ -0,0 +1,123 @@
+./:: info: Overall metrics for 'std.code.member:methods' metric
+	Average        : 6.93732193732 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 77
+	Total          : 2435.0
+	Distribution   : 351 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.168 : 0.168 :  59	|||||||||||||||||
+	             2 : 0.199 : 0.368 :  70	||||||||||||||||||||
+	             3 : 0.111 : 0.479 :  39	|||||||||||
+	             4 : 0.054 : 0.533 :  19	|||||
+	             5 : 0.040 : 0.573 :  14	||||
+	             6 : 0.077 : 0.650 :  27	||||||||
+	             7 : 0.046 : 0.695 :  16	|||||
+	             8 : 0.068 : 0.764 :  24	|||||||
+	          9-10 : 0.066 : 0.829 :  23	|||||||
+	            11 : 0.014 : 0.843 :   5	|
+	            12 : 0.020 : 0.863 :   7	||
+	            13 : 0.020 : 0.883 :   7	||
+	         14-15 : 0.017 : 0.900 :   6	||
+	         16-17 : 0.017 : 0.917 :   6	||
+	         18-20 : 0.020 : 0.937 :   7	||
+	         21-22 : 0.011 : 0.949 :   4	|
+	         24-26 : 0.017 : 0.966 :   6	||
+	         27-30 : 0.014 : 0.980 :   5	|
+	         31-53 : 0.011 : 0.991 :   4	|
+	         55-77 : 0.009 : 1.000 :   3	|
+
+./:: info: Overall metrics for 'std.code.member:globals' metric
+	Average        : 1.0 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 1
+	Total          : 1.0
+	Distribution   : 1 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 1.000 : 1.000 : 1	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+./:: info: Overall metrics for 'std.code.member:fields' metric
+	Average        : 1.14285714286 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 2
+	Total          : 8.0
+	Distribution   : 7 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.857 : 0.857 : 6	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             2 : 0.143 : 1.000 : 1	||||||||||||||
+
+./:: info: Overall metrics for 'std.code.member:interfaces' metric
+	Average        : None (excluding zero metric values)
+	Minimum        : None
+	Maximum        : None
+	Total          : 0.0
+	Distribution   : 0 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+
+./:: info: Overall metrics for 'std.code.member:classes' metric
+	Average        : 1.33974358974 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 5
+	Total          : 209.0
+	Distribution   : 156 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.776 : 0.776 : 121	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             2 : 0.160 : 0.936 :  25	||||||||||||||||
+	             3 : 0.026 : 0.962 :   4	|||
+	             4 : 0.026 : 0.987 :   4	|||
+	             5 : 0.013 : 1.000 :   2	|
+
+./:: info: Overall metrics for 'std.code.member:namespaces' metric
+	Average        : 1.06157112527 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 9
+	Total          : 500.0
+	Distribution   : 471 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.962 : 0.962 : 453	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             2 : 0.028 : 0.989 :  13	|||
+	             3 : 0.008 : 0.998 :   4	|
+	             9 : 0.002 : 1.000 :   1	
+
+./:: info: Overall metrics for 'std.code.member:structs' metric
+	Average        : 2.40707964602 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 26
+	Total          : 272.0
+	Distribution   : 113 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.504 : 0.504 :  57	||||||||||||||||||||||||||||||||||||||||||||||||||
+	             2 : 0.274 : 0.779 :  31	|||||||||||||||||||||||||||
+	             3 : 0.088 : 0.867 :  10	|||||||||
+	             4 : 0.053 : 0.920 :   6	|||||
+	             5 : 0.027 : 0.947 :   3	|||
+	             6 : 0.009 : 0.956 :   1	|
+	             7 : 0.009 : 0.965 :   1	|
+	            10 : 0.009 : 0.973 :   1	|
+	            15 : 0.009 : 0.982 :   1	|
+	            20 : 0.009 : 0.991 :   1	|
+	            26 : 0.009 : 1.000 :   1	|
+
+./:: info: Overall metrics for 'std.code.member:types' metric
+	Average        : 2.02100840336 (excluding zero metric values)
+	Minimum        : 1
+	Maximum        : 26
+	Total          : 481.0
+	Distribution   : 238 regions in total (including 0 suppressed)
+	  Metric value : Ratio : R-sum : Number of regions
+	             1 : 0.592 : 0.592 : 141	|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+	             2 : 0.235 : 0.828 :  56	||||||||||||||||||||||||
+	             3 : 0.076 : 0.903 :  18	||||||||
+	             4 : 0.042 : 0.945 :  10	||||
+	             5 : 0.017 : 0.962 :   4	||
+	             6 : 0.008 : 0.971 :   2	|
+	             7 : 0.004 : 0.975 :   1	
+	             9 : 0.008 : 0.983 :   2	|
+	            15 : 0.004 : 0.987 :   1	
+	            16 : 0.004 : 0.992 :   1	
+	            20 : 0.004 : 0.996 :   1	
+	            26 : 0.004 : 1.000 :   1	
+
+./:: info: Directory content:
+	Directory      : interprocess
+
+

+ 22 - 14
mainline/tests/system/test_boost_parts/test_workflow_export_default_stdout.gold.txt

@@ -254,11 +254,12 @@ file,region,type,modified,line start,line end,std.code.complexity:cyclomatic,std
 ./interprocess/detail/intersegment_ptr.hpp,__global__,global,,1,1041,,0
 ./interprocess/detail/intersegment_ptr.hpp,boost,namespace,,41,931,,8
 ./interprocess/detail/intersegment_ptr.hpp,interprocess,namespace,,52,907,,14
-./interprocess/detail/intersegment_ptr.hpp,intersegment_base,struct,,57,209,,36
+./interprocess/detail/intersegment_ptr.hpp,intersegment_base,struct,,57,209,,32
 ./interprocess/detail/intersegment_ptr.hpp,intersegment_base,function,,88,92,0,5
 ./interprocess/detail/intersegment_ptr.hpp,relative_addressing,struct,,94,102,,9
 ./interprocess/detail/intersegment_ptr.hpp,direct_addressing,struct,,104,109,,6
 ./interprocess/detail/intersegment_ptr.hpp,segmented_addressing,struct,,111,117,,7
+./interprocess/detail/intersegment_ptr.hpp,members_t,struct,,119,123,,5
 ./interprocess/detail/intersegment_ptr.hpp,relative_calculate_begin_addr,function,,127,132,0,6
 ./interprocess/detail/intersegment_ptr.hpp,relative_set_begin_from_base,function,,134,139,0,6
 ./interprocess/detail/intersegment_ptr.hpp,relative_size,function,,141,150,0,8
@@ -642,8 +643,12 @@ file,region,type,modified,line start,line end,std.code.complexity:cyclomatic,std
 ./interprocess/detail/windows_intermodule_singleton.hpp,ipcdetail,namespace,,36,300,,3
 ./interprocess/detail/windows_intermodule_singleton.hpp,intermodule_singleton_helpers,namespace,,38,288,,4
 ./interprocess/detail/windows_intermodule_singleton.hpp,windows_semaphore_based_map,class,,40,232,,8
-./interprocess/detail/windows_intermodule_singleton.hpp,windows_semaphore_based_map,function,,54,149,6,60
-./interprocess/detail/windows_intermodule_singleton.hpp,get_map_unlocked,function,,151,178,1,27
+./interprocess/detail/windows_intermodule_singleton.hpp,windows_semaphore_based_map,function,,54,149,6,52
+./interprocess/detail/windows_intermodule_singleton.hpp,caster_union,struct,,71,82,,5
+./interprocess/detail/windows_intermodule_singleton.hpp,caster_union,struct,,89,95,,5
+./interprocess/detail/windows_intermodule_singleton.hpp,get_map_unlocked,function,,151,178,1,19
+./interprocess/detail/windows_intermodule_singleton.hpp,caster_union,struct,,154,158,,5
+./interprocess/detail/windows_intermodule_singleton.hpp,caster_union,struct,,165,169,,5
 ./interprocess/detail/windows_intermodule_singleton.hpp,find,function,,180,191,1,12
 ./interprocess/detail/windows_intermodule_singleton.hpp,insert,function,,193,199,0,7
 ./interprocess/detail/windows_intermodule_singleton.hpp,erase,function,,201,206,0,6
@@ -1830,7 +1835,8 @@ file,region,type,modified,line start,line end,std.code.complexity:cyclomatic,std
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,boost,namespace,,37,191,,2
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,interprocess,namespace,,38,190,,2
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,xsi,namespace,,39,189,,2
-./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,advanced_sem_open_or_create,function,,45,118,10,37
+./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,advanced_sem_open_or_create,function,,45,118,10,33
+./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,semun,struct,,49,53,,5
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,sembuf,struct,,65,82,,4
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,sembuf,struct,,108,111,,3
 ./interprocess/sync/xsi/advanced_xsi_semaphore.hpp,advanced_sem_rm,function,,158,163,1,6
@@ -2622,43 +2628,44 @@ file,region,type,modified,line start,line end,std.code.complexity:cyclomatic,std
 ./interprocess/detail/win32_api.hpp,winapi,namespace,,48,221,,131
 ./interprocess/detail/win32_api.hpp,boost,namespace,,226,1019,,2
 ./interprocess/detail/win32_api.hpp,interprocess,namespace,,227,1018,,2
-./interprocess/detail/win32_api.hpp,winapi,namespace,,228,1017,,201
+./interprocess/detail/win32_api.hpp,winapi,namespace,,228,1017,,220
 ./interprocess/detail/win32_api.hpp,GUID_BIPC,struct,,230,236,,7
-./interprocess/detail/win32_api.hpp,wchar_variant,struct,,243,250,,8
+./interprocess/detail/win32_api.hpp,wchar_variant,struct,,243,250,,5
+./interprocess/detail/win32_api.hpp,value_t,struct,,246,249,,4
 ./interprocess/detail/win32_api.hpp,IUnknown_BIPC,struct,,252,261,,9
 ./interprocess/detail/win32_api.hpp,IWbemClassObject_BIPC,struct,,263,367,,81
 ./interprocess/detail/win32_api.hpp,IWbemContext_BIPC,struct,,369,405,,28
 ./interprocess/detail/win32_api.hpp,IEnumWbemClassObject_BIPC,struct,,408,430,,18
 ./interprocess/detail/win32_api.hpp,IWbemServices_BIPC,struct,,432,579,,125
 ./interprocess/detail/win32_api.hpp,IWbemLocator_BIPC,struct,,581,594,,13
-./interprocess/detail/win32_api.hpp,interprocess_overlapped,struct,,596,609,,10
+./interprocess/detail/win32_api.hpp,interprocess_overlapped,struct,,596,609,,7
+./interprocess/detail/win32_api.hpp,__noname__,struct,,600,606,,4
 ./interprocess/detail/win32_api.hpp,__noname__,struct,,601,604,,4
 ./interprocess/detail/win32_api.hpp,interprocess_semaphore_basic_information,struct,,611,615,,5
 ./interprocess/detail/win32_api.hpp,interprocess_section_basic_information,struct,,617,622,,6
 ./interprocess/detail/win32_api.hpp,interprocess_filetime,struct,,624,628,,5
 ./interprocess/detail/win32_api.hpp,win32_find_data_t,struct,,630,642,,13
 ./interprocess/detail/win32_api.hpp,interprocess_security_attributes,struct,,644,649,,6
-./interprocess/detail/win32_api.hpp,system_info,struct,,651,668,,15
+./interprocess/detail/win32_api.hpp,system_info,struct,,651,668,,12
+./interprocess/detail/win32_api.hpp,__noname__,struct,,652,658,,4
 ./interprocess/detail/win32_api.hpp,__noname__,struct,,653,657,,4
 ./interprocess/detail/win32_api.hpp,interprocess_memory_basic_information,struct,,670,679,,10
 ./interprocess/detail/win32_api.hpp,interprocess_acl,struct,,681,688,,8
 ./interprocess/detail/win32_api.hpp,_interprocess_security_descriptor,struct,,690,699,,10
-./interprocess/detail/win32_api.hpp,__noname__,class,,745,747,,3
 ./interprocess/detail/win32_api.hpp,file_name_information_t,struct,,749,752,,4
 ./interprocess/detail/win32_api.hpp,file_rename_information_t,struct,,754,759,,6
 ./interprocess/detail/win32_api.hpp,unicode_string_t,struct,,761,765,,5
 ./interprocess/detail/win32_api.hpp,object_attributes_t,struct,,767,774,,8
-./interprocess/detail/win32_api.hpp,io_status_block_t,struct,,776,783,,7
+./interprocess/detail/win32_api.hpp,io_status_block_t,struct,,776,783,,4
+./interprocess/detail/win32_api.hpp,__noname__,struct,,777,780,,4
+./interprocess/detail/win32_api.hpp,system_timeofday_information,struct,,785,796,,5
 ./interprocess/detail/win32_api.hpp,data_t,struct,,787,794,,8
 ./interprocess/detail/win32_api.hpp,interprocess_by_handle_file_information,struct,,798,810,,13
-./interprocess/detail/win32_api.hpp,__noname__,class,,812,822,,11
-./interprocess/detail/win32_api.hpp,__noname__,class,,824,831,,8
-./interprocess/detail/win32_api.hpp,__noname__,class,,833,837,,5
 ./interprocess/detail/win32_api.hpp,object_name_information_t,struct,,839,843,,5
 ./interprocess/detail/win32_api.hpp,interprocess_eventlogrecord,struct,,845,874,,19
 ./interprocess/detail/win32_api.hpp,boost,namespace,,1021,2093,,2
 ./interprocess/detail/win32_api.hpp,interprocess,namespace,,1022,2092,,2
-./interprocess/detail/win32_api.hpp,winapi,namespace,,1023,2091,,53
+./interprocess/detail/win32_api.hpp,winapi,namespace,,1023,2091,,49
 ./interprocess/detail/win32_api.hpp,get_last_error,function,,1025,1026,0,2
 ./interprocess/detail/win32_api.hpp,set_last_error,function,,1028,1029,0,2
 ./interprocess/detail/win32_api.hpp,format_message,function,,1031,1038,0,8
@@ -2742,6 +2749,7 @@ file,region,type,modified,line start,line end,std.code.complexity:cyclomatic,std
 ./interprocess/detail/win32_api.hpp,eventlog_handle_closer,class,,1513,1522,,6
 ./interprocess/detail/win32_api.hpp,eventlog_handle_closer,function,,1518,1519,0,2
 ./interprocess/detail/win32_api.hpp,~eventlog_handle_closer,function,,1520,1521,0,2
+./interprocess/detail/win32_api.hpp,ntquery_mem_t,struct,,1524,1532,,5
 ./interprocess/detail/win32_api.hpp,ren_t,struct,,1527,1531,,5
 ./interprocess/detail/win32_api.hpp,nt_query_mem_deleter,class,,1534,1573,,9
 ./interprocess/detail/win32_api.hpp,nt_query_mem_deleter,function,,1541,1545,0,5

+ 21 - 21
mainline/tests/system/test_boost_parts/test_workflow_view_default_stdout.gold.txt

@@ -27,32 +27,32 @@
 	            37 : 0.000 : 1.000 :    1	
 
 ./:: info: Overall metrics for 'std.code.lines:code' metric
-	Average        : 6.64356984479
+	Average        : 6.6310840708
 	Minimum        : 0
-	Maximum        : 201
-	Total          : 23970.0
-	Distribution   : 3608 regions in total (including 0 suppressed)
+	Maximum        : 220
+	Total          : 23978.0
+	Distribution   : 3616 regions in total (including 0 suppressed)
 	  Metric value : Ratio : R-sum : Number of regions
 	           0-1 : 0.088 : 0.088 :  319	|||||||||
-	             2 : 0.320 : 0.409 : 1155	||||||||||||||||||||||||||||||||
-	             3 : 0.108 : 0.517 :  390	|||||||||||
-	             4 : 0.081 : 0.598 :  294	||||||||
-	             5 : 0.080 : 0.678 :  290	||||||||
-	             6 : 0.061 : 0.739 :  220	||||||
-	             7 : 0.049 : 0.788 :  176	|||||
-	             8 : 0.030 : 0.818 :  109	|||
-	             9 : 0.025 : 0.843 :   89	||
-	         10-11 : 0.032 : 0.876 :  117	|||
-	         12-13 : 0.020 : 0.895 :   71	||
-	            14 : 0.012 : 0.907 :   43	|
-	         15-16 : 0.017 : 0.924 :   61	||
-	         17-19 : 0.015 : 0.939 :   55	||
+	             2 : 0.319 : 0.408 : 1155	||||||||||||||||||||||||||||||||
+	             3 : 0.108 : 0.515 :  389	|||||||||||
+	             4 : 0.083 : 0.598 :  299	||||||||
+	             5 : 0.082 : 0.680 :  298	||||||||
+	             6 : 0.061 : 0.741 :  220	||||||
+	             7 : 0.049 : 0.790 :  176	|||||
+	             8 : 0.030 : 0.819 :  107	|||
+	             9 : 0.025 : 0.844 :   89	||
+	         10-11 : 0.032 : 0.876 :  115	|||
+	         12-13 : 0.020 : 0.896 :   72	||
+	            14 : 0.012 : 0.908 :   43	|
+	         15-16 : 0.017 : 0.924 :   60	||
+	         17-19 : 0.015 : 0.940 :   56	||
 	         20-22 : 0.013 : 0.952 :   46	|
 	         23-26 : 0.011 : 0.963 :   40	|
-	         27-30 : 0.009 : 0.972 :   33	|
-	         31-39 : 0.009 : 0.981 :   33	|
-	         40-65 : 0.009 : 0.991 :   34	|
-	        66-201 : 0.009 : 1.000 :   33	|
+	         27-31 : 0.010 : 0.973 :   35	|
+	         32-40 : 0.009 : 0.982 :   32	|
+	         41-66 : 0.009 : 0.991 :   34	|
+	        67-220 : 0.009 : 1.000 :   31	|
 
 ./:: info: Directory content:
 	Directory      : interprocess

+ 22 - 22
mainline/tests/system/test_boost_parts/test_workflow_view_second_all_stdout.gold.txt

@@ -27,32 +27,32 @@
 	         36-37 : 0.000 : 1.000 :    1 [+0   ]	
 
 ./:: info: Overall metrics for 'std.code.lines:code' metric
-	Average        : 6.64356984479 [+0.012181964309]
+	Average        : 6.6310840708 [+0.0122487406209]
 	Minimum        : 0 [+0]
-	Maximum        : 201 [+4]
-	Total          : 23970.0 [+223.0]
-	Distribution   : 3608 [+27] regions in total (including 0 [+0] suppressed)
+	Maximum        : 220 [+6]
+	Total          : 23978.0 [+223.0]
+	Distribution   : 3616 [+27] regions in total (including 0 [+0] suppressed)
 	  Metric value : Ratio : R-sum : Number of regions
 	           0-1 : 0.088 : 0.088 :  319 [+3   ]	|||||||||
-	             2 : 0.320 : 0.409 : 1155 [+9   ]	||||||||||||||||||||||||||||||||
-	             3 : 0.108 : 0.517 :  390 [-3   ]	|||||||||||
-	             4 : 0.081 : 0.598 :  294 [+7   ]	||||||||
-	             5 : 0.080 : 0.678 :  290 [+7   ]	||||||||
-	             6 : 0.061 : 0.739 :  220 [-1   ]	||||||
-	             7 : 0.049 : 0.788 :  176 [-2   ]	|||||
-	             8 : 0.030 : 0.818 :  109 [-1   ]	|||
-	             9 : 0.025 : 0.843 :   89 [+4   ]	||
-	         10-11 : 0.032 : 0.876 :  117 [+9   ]	|||
-	         12-13 : 0.020 : 0.895 :   71 [-9   ]	||
-	            14 : 0.012 : 0.907 :   43 [+0   ]	|
-	         15-16 : 0.017 : 0.924 :   61 [+0   ]	||
-	         17-19 : 0.015 : 0.939 :   55 [+6   ]	||
+	             2 : 0.319 : 0.408 : 1155 [+9   ]	||||||||||||||||||||||||||||||||
+	             3 : 0.108 : 0.515 :  389 [-3   ]	|||||||||||
+	             4 : 0.083 : 0.598 :  299 [+7   ]	||||||||
+	             5 : 0.082 : 0.680 :  298 [+7   ]	||||||||
+	             6 : 0.061 : 0.741 :  220 [-1   ]	||||||
+	             7 : 0.049 : 0.790 :  176 [-2   ]	|||||
+	             8 : 0.030 : 0.819 :  107 [-1   ]	|||
+	             9 : 0.025 : 0.844 :   89 [+4   ]	||
+	         10-11 : 0.032 : 0.876 :  115 [+9   ]	|||
+	         12-13 : 0.020 : 0.896 :   72 [-9   ]	||
+	            14 : 0.012 : 0.908 :   43 [+0   ]	|
+	         15-16 : 0.017 : 0.924 :   60 [+0   ]	||
+	         17-19 : 0.015 : 0.940 :   56 [+5   ]	||
 	         20-22 : 0.013 : 0.952 :   46 [-3   ]	|
-	         23-26 : 0.011 : 0.963 :   40 [+2   ]	|
-	         27-30 : 0.009 : 0.972 :   33 [-3   ]	|
-	         31-39 : 0.009 : 0.981 :   33 [+0   ]	|
-	         40-65 : 0.009 : 0.991 :   34 [+1   ]	|
-	        66-201 : 0.009 : 1.000 :   33 [+1   ]	|
+	         23-26 : 0.011 : 0.963 :   40 [+3   ]	|
+	         27-31 : 0.010 : 0.973 :   35 [-3   ]	|
+	         32-40 : 0.009 : 0.982 :   32 [+0   ]	|
+	         41-66 : 0.009 : 0.991 :   34 [+1   ]	|
+	        67-220 : 0.009 : 1.000 :   31 [+1   ]	|
 
 ./:: info: Directory content:
 	Directory      : interprocess

+ 9 - 9
mainline/tests/system/test_boost_parts/test_workflow_view_second_touched_stdout.gold.txt

@@ -26,10 +26,10 @@
 	         36-37 : 0.005 : 1.000 :   1 [+0  ]	|
 
 ./:: info: Overall metrics for 'std.code.lines:code' metric
-	Average        : 15.9645390071 [-0.815853149771]
+	Average        : 16.0177304965 [-0.821485189821]
 	Minimum        : 0 [+0]
-	Maximum        : 201 [+6]
-	Total          : 4502.0 [+223.0]
+	Maximum        : 220 [+6]
+	Total          : 4517.0 [+223.0]
 	Distribution   : 282 [+27] regions in total (including 0 [+0] suppressed)
 	  Metric value : Ratio : R-sum : Number of regions
 	           0-1 : 0.053 : 0.053 :  15 [+3  ]	|||||
@@ -45,13 +45,13 @@
 	         12-13 : 0.043 : 0.723 :  12 [-9  ]	||||
 	         14-15 : 0.039 : 0.762 :  11 [-1  ]	||||
 	         16-18 : 0.028 : 0.791 :   8 [+4  ]	|||
-	         19-22 : 0.039 : 0.830 :  11 [+0  ]	||||
-	         23-26 : 0.039 : 0.869 :  11 [+2  ]	||||
+	         19-22 : 0.039 : 0.830 :  11 [-1  ]	||||
+	         23-26 : 0.039 : 0.869 :  11 [+3  ]	||||
 	         27-32 : 0.028 : 0.897 :   8 [-3  ]	|||
-	         38-50 : 0.025 : 0.922 :   7 [+0  ]	||
-	         51-69 : 0.025 : 0.947 :   7 [+1  ]	||
-	        71-100 : 0.032 : 0.979 :   9 [+2  ]	|||
-	       101-201 : 0.021 : 1.000 :   6 [-1  ]	||
+	         38-50 : 0.028 : 0.926 :   8 [+1  ]	|||
+	         51-71 : 0.025 : 0.950 :   7 [+0  ]	||
+	        73-100 : 0.028 : 0.979 :   8 [+2  ]	|||
+	       101-220 : 0.021 : 1.000 :   6 [-1  ]	||
 
 ./:: info: Directory content:
 	Directory      : interprocess