commit d43fd6cf3462a1e4c2f8bde1d24212b72545e653
parent 6ea98fd377f5245edc595d83f51a3f71c029ae27
Author: Kyle Milz <kyle@0x30.net>
Date: Wed, 22 Jun 2016 22:47:47 -0600
Test: also keep a hash of tus for fast lookups
Diffstat:
5 files changed, 56 insertions(+), 51 deletions(-)
diff --git a/Test/Viewer.pm b/Test/Viewer.pm
@@ -48,7 +48,8 @@ sub get_metadata {
pgrp => $pgrp,
};
- my @tus;
+ my @tus_ordered;
+ my %tus;
for (1..$num_tus) {
my $buf = read_all($client, 8);
my $file_name_sz = unpack("Q", $buf);
@@ -61,31 +62,33 @@ sub get_metadata {
$buf = read_all($client, 4);
my $inst_sites = unpack("L", $buf);
- push @tus, { filename => $file_name, lines => $num_lines, inst_sites => $inst_sites };
+ push @tus_ordered, $file_name;
+ $tus{$file_name} = { lines => $num_lines, inst_sites => $inst_sites };
}
- $runtime_metadata->{tus} = \@tus;
+ $runtime_metadata->{tus_ordered} = \@tus_ordered;
+ $runtime_metadata->{tus} = \%tus;
return $runtime_metadata;
}
sub get_execution_data {
- my ($self, $tus) = @_;
+ my ($self, $tus_ordered, $tus) = @_;
my $client = $self->{client_socket};
- my @data;
- for (@$tus) {
- my $num_lines = $_->{lines};
+ my %data;
+ for my $file_name (@$tus_ordered) {
+ my $num_lines = $tus->{$file_name}->{lines};
my $buf = read_all($client, 8 * $num_lines);
my @data_tmp = unpack("Q$num_lines", $buf);
- push @data, [@data_tmp];
+ $data{$file_name} = \@data_tmp;
}
# Send an 'ok' response
$client->syswrite("\x01", 1);
- return \@data;
+ return \%data;
}
sub read_all {
diff --git a/t/runtime_counters_increase.t b/t/runtime_counters_increase.t
@@ -48,17 +48,18 @@ $project->run(45);
# Accept the runtime's connection
$viewer->accept();
my $runtime_metadata = $viewer->get_metadata();
+my $tus_ordered = $runtime_metadata->{tus_ordered};
my $tus = $runtime_metadata->{tus};
-my $source_0 = $tus->[0];
-like ($source_0->{filename}, qr/.*source_0\.c/, "runtime filename check");
-is( $source_0->{lines}, 28, "runtime lines count" );
+my ($file_name) = keys %$tus;
+like ($file_name, qr/.*source_0\.c/, "runtime filename check");
+is( $tus->{$file_name}->{lines}, 28, "runtime lines count" );
-my $data = $viewer->get_execution_data($tus);
-my @exec_lines1 = @{ $data->[0] };
+my $data = $viewer->get_execution_data($tus_ordered, $tus);
+my @exec_lines1 = @{ $data->{$file_name} };
-my $data = $viewer->get_execution_data($tus);
-my @exec_lines2 = @{ $data->[0] };
+my $data = $viewer->get_execution_data($tus_ordered, $tus);
+my @exec_lines2 = @{ $data->{$file_name} };
# Only lines 8 - 12 in the source code above are executing
for (8..12) {
diff --git a/t/runtime_metadata.t b/t/runtime_metadata.t
@@ -39,11 +39,11 @@ cmp_ok( $ppid, "<", 100 * 1000, "ppid is a reasonable value" );
cmp_ok( $pgrp, "<", 100 * 1000, "pgrp is a reasonable value" );
my $tus = $runtime_metadata->{tus};
-is ( scalar(@$tus), 1, "translation unit count" );
-my $tu = $tus->[0];
+is ( scalar(keys %$tus), 1, "translation unit count" );
-like( $tu->{filename}, qr/.*source_0.c/, "filename check" );
-is( $tu->{lines}, 8, "line count check" );
+my ($file_name) = keys %$tus;
+like( $file_name, qr/.*source_0.c/, "filename check" );
+is( $tus->{$file_name}->{lines}, 8, "line count check" );
$project->kill();
my ($ret, $err) = $project->wait();
diff --git a/t/runtime_reconnect.t b/t/runtime_reconnect.t
@@ -29,11 +29,11 @@ $viewer->accept();
my $runtime_metadata = $viewer->get_metadata();
my $tus = $runtime_metadata->{tus};
-is ( scalar(@$tus), 1, "translation unit count" );
-my $tu = $tus->[0];
+is ( scalar(keys %$tus), 1, "translation unit count" );
-like( $tu->{filename}, qr/.*source_0.c/, "filename check" );
-is( $tu->{lines}, 7, "line count check" );
+my ($file_name) = keys %$tus;
+like( $file_name, qr/.*source_0.c/, "filename check" );
+is( $tus->{$file_name}->{lines}, 7, "line count check" );
$project->kill();
my ($ret, $err) = $project->wait();
diff --git a/t/runtime_sanity.t b/t/runtime_sanity.t
@@ -1,7 +1,7 @@
use strict;
use Data::Dumper;
-use Test::More tests => 45;
+use Test::More tests => 48;
use Test::Differences;
use Test::Project;
@@ -64,40 +64,41 @@ $viewer->accept();
# Request and check metadata first
my $runtime_metadata = $viewer->get_metadata();
+my $tus_ordered = $runtime_metadata->{tus_ordered};
my $tus = $runtime_metadata->{tus};
-my ($source_0, $source_1, $source_2) = @$tus;
-like( $source_0->{filename}, qr/.*source_2.c/, "runtime filename check 0" );
-is( $source_0->{lines}, 9, "runtime line count check 0" );
-#is( $source_0->{inst_sites}, 7, "instrumented site count 0" );
+my ($fn0, $fn1, $fn2) = sort keys %$tus;
+like( $fn0, qr/.*source_0.c/, "runtime filename check 0" );
+is( $tus->{$fn0}->{lines}, 20, "runtime line count check 0" );
+is( $tus->{$fn0}->{inst_sites}, 7, "instrumented site count 0" );
-like( $source_1->{filename}, qr/.*source_1.c/, "runtime filename check 1" );
-is( $source_1->{lines}, 11, "runtime line count check 1" );
-#is( $source_1->{inst_sites}, 7, "instrumented site count 1" );
+like( $fn1, qr/.*source_1.c/, "runtime filename check 1" );
+is( $tus->{$fn1}->{lines}, 11, "runtime line count check 1" );
+is( $tus->{$fn1}->{inst_sites}, 7, "instrumented site count 1" );
-like( $source_2->{filename}, qr/.*source_0.c/, "runtime filename check 2" );
-is( $source_2->{lines}, 20, "runtime line count check 2" );
-#is( $source_2->{inst_sites}, 6, "instrumented site count 2" );
+like( $fn2, qr/.*source_2.c/, "runtime filename check 2" );
+is( $tus->{$fn2}->{lines}, 9, "runtime line count check 2" );
+is( $tus->{$fn2}->{inst_sites}, 6, "instrumented site count 2" );
# Request and check execution data
-my $data = $viewer->get_execution_data($tus);
-
-my @lines = @{ $data->[2] };
-is ( $lines[$_], 0, "src 0 line $_ check" ) for (1..11);
-is ( $lines[12], 1, "src 0 line 14 check" );
-is ( $lines[$_], 0, "src 0 line $_ check" ) for (13..14);
-is ( $lines[15], 1, "src 0 line 15 check" );
-is ( $lines[16], 0, "src 0 line 16 check" );
-is ( $lines[17], 2, "src 0 line 17 check" );
-is ( $lines[$_], 0, "src 0 line $_ check" ) for (18..19);
-
-my @lines = @{ $data->[1] };
-is ( $lines[$_], 0, "src 1 line $_ check" ) for (0..3);
+my $data = $viewer->get_execution_data($tus_ordered, $tus);
+
+my @lines = @{ $data->{$fn0} };
+is( $lines[$_], 0, "src 0 line $_ check" ) for (1..11);
+is( $lines[12], 1, "src 0 line 14 check" );
+is( $lines[$_], 0, "src 0 line $_ check" ) for (13..14);
+is( $lines[15], 1, "src 0 line 15 check" );
+is( $lines[16], 0, "src 0 line 16 check" );
+is( $lines[17], 2, "src 0 line 17 check" );
+is( $lines[$_], 0, "src 0 line $_ check" ) for (18..19);
+
+my @lines = @{ $data->{$fn1} };
+is( $lines[$_], 0, "src 1 line $_ check" ) for (0..3);
cmp_ok ( $lines[$_], ">", 10, "src 1 line $_ check" ) for (4..7);
-is ( $lines[8], 0, "src 1 line 8 check" );
+is( $lines[8], 0, "src 1 line 8 check" );
-my @lines = @{ $data->[0] };
-is ( $lines[$_], 0, "src 2 line $_ check" ) for (0..8);
+my @lines = @{ $data->{$fn2} };
+is( $lines[$_], 0, "src 2 line $_ check" ) for (0..8);
$project->kill();
my ($ret, $err) = $project->wait();