From 0dd0b4c496c69f47078de58a3c42939a885ddd6b Mon Sep 17 00:00:00 2001
From: "arseny.kapoulkine"
 <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>
Date: Sun, 29 Aug 2010 15:46:30 +0000
Subject: [PATCH] tests: Introduced fullcoverage mode

git-svn-id: http://pugixml.googlecode.com/svn/trunk@688 99668b35-9821-0410-8761-19e4c4f06640
---
 Jamfile.jam          | 10 +++++++++-
 tests/gcov-filter.pl | 23 +++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/Jamfile.jam b/Jamfile.jam
index 15a0e63a..df8d5be3 100644
--- a/Jamfile.jam
+++ b/Jamfile.jam
@@ -43,7 +43,15 @@ if ( $(toolset:I=^mingw) || $(toolset:I=^gcc) )
 {
 	CCFLAGS = -fprofile-arcs -ftest-coverage ;
 	LDFLAGS = -fprofile-arcs ;
-	GCOVFLAGS = -n ;
+
+	if $(fullcoverage)
+	{
+		GCOVFLAGS = --branch-probabilities --function-summaries ;
+	}
+	else
+	{
+		GCOVFLAGS = --no-output ;
+	}
 }
 
 # build folder
diff --git a/tests/gcov-filter.pl b/tests/gcov-filter.pl
index c68aa1f7..f0d20197 100644
--- a/tests/gcov-filter.pl
+++ b/tests/gcov-filter.pl
@@ -1,10 +1,33 @@
 #!/usr/bin/perl
 
+sub funcinfo
+{
+	my ($name, $info) = @_;
+
+	return if ($info =~ /No executable lines/);
+
+	my $lines = ($info =~ /Lines executed:([^%]+)%/) ? $1 : 100;
+	my $calls = ($info =~ /Calls executed:([^%]+)%/) ? $1 : 100;
+	my $branches = ($info =~ /Branches executed:([^%]+)%/) ? $1 : 100;
+	my $taken = ($info =~ /Taken at least once:([^%]+)%/) ? $1 : 100;
+
+	return if ($lines == 100 && $calls == 100 && $branches == 100 && $taken == 100);
+
+	return "Function $name: L $lines, C $calls, B $branches, BT $taken\n";
+}
+
 $prefix = join(' ', @ARGV);
 $prefix .= ' ' if ($prefix ne '');
 
 $lines = join('', <STDIN>);
+
+# merge file information
 $lines =~ s/File (.+)\nLines (.+)\n(.+\n)*\n/$1 $2\n/g;
+
+# merge function information
+$lines =~ s/Function (.+)\n((.+\n)*)\n/funcinfo($1, $2)/eg;
+
+# remove include information
 $lines =~ s/.+include\/c\+\+.+\n//g;
 
 foreach $line (split /\n/, $lines)
-- 
GitLab