Global Metrics
path: .metrics.cyclomatic.sum
old: 103.0
new: 5.0
path: .metrics.cyclomatic.average
old: 3.433333333333333
new: 1.0
path: .metrics.halstead.N1
old: 1289.0
new: 472.0
path: .metrics.halstead.bugs
old: 3.2491418289929848
new: 1.1160182289269422
path: .metrics.halstead.vocabulary
old: 374.0
new: 101.0
path: .metrics.halstead.estimated_program_length
old: 3022.405585786558
new: 613.8390530476457
path: .metrics.halstead.effort
old: 962354.0668190572
new: 193726.4029281486
path: .metrics.halstead.n2
old: 337.0
new: 87.0
path: .metrics.halstead.volume
old: 18931.37122865112
new: 5872.542527787083
path: .metrics.halstead.purity_ratio
old: 1.3645171944860306
new: 0.6959626451787366
path: .metrics.halstead.length
old: 2215.0
new: 882.0
path: .metrics.halstead.n1
old: 37.0
new: 14.0
path: .metrics.halstead.level
old: 0.019671939758332847
new: 0.030313588850174215
path: .metrics.halstead.N2
old: 926.0
new: 410.0
path: .metrics.halstead.difficulty
old: 50.83382789317507
new: 32.98850574712644
path: .metrics.halstead.time
old: 53464.114823280965
new: 10762.5779404527
path: .metrics.mi.mi_original
old: -8.729545488861334
new: 38.89143527844588
path: .metrics.mi.mi_sei
old: -56.34152515450637
new: 2.7398735036488233
path: .metrics.mi.mi_visual_studio
old: 0.0
new: 22.743529402599933
path: .metrics.loc.cloc
old: 53.0
new: 17.0
path: .metrics.loc.sloc
old: 646.0
new: 200.0
path: .metrics.loc.blank
old: 107.0
new: 38.0
path: .metrics.loc.lloc
old: 230.0
new: 68.0
path: .metrics.loc.ploc
old: 486.0
new: 145.0
path: .metrics.nexits.average
old: 0.9333333333333332
new: 0.0
path: .metrics.nexits.sum
old: 28.0
new: 0.0
path: .metrics.nargs.average
old: 1.1666666666666667
new: 2.0
path: .metrics.nargs.sum
old: 35.0
new: 8.0
path: .metrics.nom.functions
old: 28.0
new: 4.0
path: .metrics.nom.total
old: 30.0
new: 4.0
path: .metrics.nom.closures
old: 2.0
new: 0.0
path: .metrics.cognitive.average
old: 3.1666666666666665
new: 0.0
path: .metrics.cognitive.sum
old: 95.0
new: 0.0
Spaces Data
Minimal test - lines (179, 200)
path: .spaces[3].metrics.halstead.N1
old: 48.0
new: 49.0
path: .spaces[3].metrics.halstead.N2
old: 35.0
new: 49.0
path: .spaces[3].metrics.halstead.vocabulary
old: 27.0
new: 29.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.224372396900984
new: 1.2016222455553445
path: .spaces[3].metrics.halstead.length
old: 83.0
new: 98.0
path: .spaces[3].metrics.halstead.time
old: 479.61625672864153
new: 206.18203683108356
path: .spaces[3].metrics.halstead.estimated_program_length
old: 101.62290894278166
new: 117.75898006442377
path: .spaces[3].metrics.halstead.difficulty
old: 21.875
new: 7.795454545454546
path: .spaces[3].metrics.halstead.n2
old: 12.0
new: 22.0
path: .spaces[3].metrics.halstead.level
old: 0.045714285714285714
new: 0.1282798833819242
path: .spaces[3].metrics.halstead.n1
old: 15.0
new: 7.0
path: .spaces[3].metrics.halstead.bugs
old: 0.14027803665454325
new: 0.07990261001621618
path: .spaces[3].metrics.halstead.volume
old: 394.65566267956785
new: 476.082137522502
path: .spaces[3].metrics.halstead.effort
old: 8633.092621115547
new: 3711.276662959504
path: .spaces[3].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[3].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[3].metrics.mi.mi_visual_studio
old: 51.71305423959054
new: 51.83277321072231
path: .spaces[3].metrics.mi.mi_sei
old: 85.23732412156556
new: 52.27286098933136
path: .spaces[3].metrics.mi.mi_original
old: 88.42932274969982
new: 88.63404219033515
path: .spaces[3].metrics.nargs.average
old: 1.0
new: 2.0
path: .spaces[3].metrics.nargs.sum
old: 1.0
new: 2.0
path: .spaces[3].metrics.loc.ploc
old: 15.0
new: 16.0
path: .spaces[3].metrics.loc.cloc
old: 5.0
new: 0.0
path: .spaces[3].metrics.loc.blank
old: 3.0
new: 6.0
path: .spaces[3].metrics.loc.sloc
old: 23.0
new: 22.0
path: .spaces[3].metrics.loc.lloc
old: 9.0
new: 6.0
path: .spaces[3].metrics.cyclomatic.average
old: 3.0
new: 1.0
path: .spaces[3].metrics.cyclomatic.sum
old: 3.0
new: 1.0
path: .spaces[3].metrics.cognitive.sum
old: 3.0
new: 0.0
path: .spaces[3].metrics.cognitive.average
old: 3.0
new: 0.0
Code
TEST(SeekableStreamWrapper, Interfaces)
{
nsCOMPtr reader;
nsCOMPtr writer;
NewSeekablePipe(getter_AddRefs(reader), getter_AddRefs(writer));
nsCOMPtr readerType1 = do_QueryInterface(reader);
EXPECT_TRUE(readerType1);
nsCOMPtr readerType2 = do_QueryInterface(reader);
EXPECT_TRUE(readerType2);
nsCOMPtr readerType3 = do_QueryInterface(reader);
EXPECT_TRUE(readerType3);
nsCOMPtr readerType4 = do_QueryInterface(reader);
EXPECT_TRUE(readerType4);
nsCOMPtr readerType5 = do_QueryInterface(reader);
EXPECT_TRUE(readerType5);
}
Minimal test - lines (13, 32)
path: .spaces[0].metrics.halstead.volume
old: 27.0
new: 516.9925001442313
path: .spaces[0].metrics.halstead.estimated_program_length
old: 16.36452797660028
new: 154.1501525493784
path: .spaces[0].metrics.halstead.time
old: 3.75
new: 303.30226675128233
path: .spaces[0].metrics.halstead.n2
old: 3.0
new: 25.0
path: .spaces[0].metrics.halstead.vocabulary
old: 8.0
new: 36.0
path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 11.0
path: .spaces[0].metrics.halstead.bugs
old: 0.005526047247960579
new: 0.10335008846740668
path: .spaces[0].metrics.halstead.length
old: 9.0
new: 100.0
path: .spaces[0].metrics.halstead.N2
old: 3.0
new: 48.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.81828088628892
new: 1.5415015254937838
path: .spaces[0].metrics.halstead.effort
old: 67.5
new: 5459.440801523082
path: .spaces[0].metrics.halstead.level
old: 0.4
new: 0.0946969696969697
path: .spaces[0].metrics.halstead.N1
old: 6.0
new: 52.0
path: .spaces[0].metrics.halstead.difficulty
old: 2.5
new: 10.56
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 16.0
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 20.0
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 6.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 89.84306917940205
new: 52.485023190222854
path: .spaces[0].metrics.mi.mi_sei
old: 146.04458498874996
new: 53.881967245876965
path: .spaces[0].metrics.mi.mi_original
old: 153.6316482967775
new: 89.74938965528109
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[0].metrics.nargs.average
old: 0.0
new: 2.0
Code
static void NewSeekablePipe(nsIInputStream** aReader,
nsIOutputStream** aWriter) {
nsCOMPtr reader;
nsCOMPtr writer;
nsresult rv =
NS_NewPipe2(getter_AddRefs(reader), getter_AddRefs(writer), true, true);
ASSERT_TRUE(NS_SUCCEEDED(rv));
nsCOMPtr seekable = do_QueryInterface(reader);
EXPECT_FALSE(seekable);
nsCOMPtr wrapped;
rv = mozilla::SeekableStreamWrapper::MaybeWrap(do_AddRef(reader),
getter_AddRefs(wrapped));
ASSERT_TRUE(NS_SUCCEEDED(rv));
wrapped.forget(aReader);
writer.forget(aWriter);
}
Minimal test - lines (54, 177)
path: .spaces[2].metrics.mi.mi_original
old: 62.9017111428782
new: 50.09483872799278
path: .spaces[2].metrics.mi.mi_sei
old: 43.811604942127886
new: 19.847124776713205
path: .spaces[2].metrics.mi.mi_visual_studio
old: 36.78462639934398
new: 29.29522732631157
path: .spaces[2].metrics.loc.lloc
old: 24.0
new: 50.0
path: .spaces[2].metrics.loc.ploc
old: 47.0
new: 93.0
path: .spaces[2].metrics.loc.cloc
old: 9.0
new: 12.0
path: .spaces[2].metrics.loc.sloc
old: 64.0
new: 124.0
path: .spaces[2].metrics.loc.blank
old: 8.0
new: 19.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 307.18795451213606
new: 387.8686140532334
path: .spaces[2].metrics.halstead.vocabulary
old: 61.0
new: 71.0
path: .spaces[2].metrics.halstead.effort
old: 33984.96064864934
new: 107025.21545209024
path: .spaces[2].metrics.halstead.n1
old: 19.0
new: 13.0
path: .spaces[2].metrics.halstead.time
old: 1888.053369369408
new: 5945.845302893901
path: .spaces[2].metrics.halstead.N1
old: 133.0
new: 321.0
path: .spaces[2].metrics.halstead.difficulty
old: 23.97619047619047
new: 29.698275862068964
path: .spaces[2].metrics.halstead.level
old: 0.041708043694141016
new: 0.03367198838896952
path: .spaces[2].metrics.halstead.length
old: 239.0
new: 586.0
path: .spaces[2].metrics.halstead.N2
old: 106.0
new: 265.0
path: .spaces[2].metrics.halstead.n2
old: 42.0
new: 58.0
path: .spaces[2].metrics.halstead.volume
old: 1417.4462236775298
new: 3603.751812029744
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.2853052490047534
new: 0.661891832855347
path: .spaces[2].metrics.halstead.bugs
old: 0.34973298357394106
new: 0.7513970502096325
path: .spaces[2].metrics.nexits.average
old: 4.0
new: 0.0
path: .spaces[2].metrics.nexits.sum
old: 4.0
new: 0.0
path: .spaces[2].metrics.cognitive.average
old: 9.0
new: 0.0
path: .spaces[2].metrics.cognitive.sum
old: 9.0
new: 0.0
path: .spaces[2].metrics.cyclomatic.sum
old: 13.0
new: 1.0
path: .spaces[2].metrics.cyclomatic.average
old: 6.5
new: 1.0
Code
TEST(SeekableStreamWrapper, WrapPipe)
{
nsCOMPtr reader;
nsCOMPtr writer;
NewSeekablePipe(getter_AddRefs(reader), getter_AddRefs(writer));
nsTArray inputData;
testing::CreateData(1024, inputData);
uint32_t numWritten = 0;
nsresult rv =
writer->Write(inputData.Elements(), inputData.Length(), &numWritten);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numWritten, 1024u);
nsCOMPtr seekable = do_QueryInterface(reader);
ASSERT_TRUE(seekable);
nsCOMPtr cloneable = do_QueryInterface(reader);
ASSERT_TRUE(cloneable);
ASSERT_TRUE(cloneable->GetCloneable());
nsCOMPtr clone1;
rv = cloneable->Clone(getter_AddRefs(clone1));
ASSERT_TRUE(NS_SUCCEEDED(rv));
ASSERT_TRUE(clone1);
// Check that we can read the first 512 bytes.
{
char buf[512];
uint32_t numRead = 0;
rv = reader->Read(buf, 512, &numRead);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numRead, 512u);
EXPECT_EQ(mozilla::Span(inputData).First(512), mozilla::Span(buf));
}
// Check that we can read the second 512 bytes.
{
char buf[512];
uint32_t numRead = 0;
rv = reader->Read(buf, 512, &numRead);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numRead, 512u);
EXPECT_EQ(mozilla::Span(inputData).Last(512), mozilla::Span(buf));
}
// Should be at the end of the pipe
{
char buf[1];
uint32_t numRead = 0;
rv = reader->Read(buf, 1, &numRead);
EXPECT_EQ(rv, NS_BASE_STREAM_WOULD_BLOCK);
}
// Re-read the second 512 bytes by seeking back.
{
rv = seekable->Seek(nsISeekableStream::NS_SEEK_CUR, -512);
EXPECT_TRUE(NS_SUCCEEDED(rv));
char buf[512];
uint32_t numRead = 0;
rv = reader->Read(buf, 512, &numRead);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numRead, 512u);
EXPECT_EQ(mozilla::Span(inputData).Last(512), mozilla::Span(buf));
}
// Re-read the last 256 bytes by seeking absolutely
{
rv = seekable->Seek(nsISeekableStream::NS_SEEK_SET, 768);
EXPECT_TRUE(NS_SUCCEEDED(rv));
char buf[256];
uint32_t numRead = 0;
rv = reader->Read(buf, 256, &numRead);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numRead, 256u);
EXPECT_EQ(mozilla::Span(inputData).Last(256), mozilla::Span(buf));
}
// Double-check that we haven't impacted our clone
{
char buf[1024];
uint32_t numRead = 0;
rv = clone1->Read(buf, 1024, &numRead);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(numRead, 1024u);
EXPECT_EQ(mozilla::Span(inputData), mozilla::Span(buf));
}
// The clone should no longer be seekable once closed.
rv = clone1->Close();
EXPECT_TRUE(NS_SUCCEEDED(rv));
nsCOMPtr clone1Seekable(do_QueryInterface(clone1));
rv = clone1Seekable->Seek(nsISeekableStream::NS_SEEK_SET, 0);
EXPECT_TRUE(NS_FAILED(rv));
// Should still be open
{
uint64_t available = 0;
rv = reader->Available(&available);
EXPECT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(available, uint64_t(0));
}
// Close the original output stream
rv = writer->Close();
EXPECT_TRUE(NS_SUCCEEDED(rv));
// Should be closed
{
uint64_t available = 0;
rv = reader->Available(&available);
EXPECT_EQ(rv, NS_BASE_STREAM_CLOSED);
}
// Seeing back to the beginning should re-open the stream which had reached
// the end.
rv = seekable->Seek(nsISeekableStream::NS_SEEK_SET, 0);
EXPECT_TRUE(NS_SUCCEEDED(rv));
testing::ConsumeAndValidateStream(reader, inputData);
}
Minimal test - lines (34, 52)
path: .spaces[1].metrics.halstead.length
old: 62.0
new: 94.0
path: .spaces[1].metrics.halstead.bugs
old: 0.06607094343959774
new: 0.08736219505784243
path: .spaces[1].metrics.halstead.n1
old: 12.0
new: 10.0
path: .spaces[1].metrics.halstead.level
old: 0.10317460317460318
new: 0.11363636363636365
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.4697623603949688
new: 1.5884647414174653
path: .spaces[1].metrics.halstead.N2
old: 21.0
new: 44.0
path: .spaces[1].metrics.halstead.n2
old: 13.0
new: 25.0
path: .spaces[1].metrics.halstead.time
old: 155.0333527970946
new: 235.71905064538203
path: .spaces[1].metrics.halstead.vocabulary
old: 25.0
new: 35.0
path: .spaces[1].metrics.halstead.N1
old: 41.0
new: 50.0
path: .spaces[1].metrics.halstead.volume
old: 287.9190837660329
new: 482.1526035928269
path: .spaces[1].metrics.halstead.difficulty
old: 9.692307692307692
new: 8.8
path: .spaces[1].metrics.halstead.effort
old: 2790.600350347703
new: 4242.942911616877
path: .spaces[1].metrics.halstead.estimated_program_length
old: 91.12526634448808
new: 149.31568569324173
path: .spaces[1].metrics.loc.sloc
old: 25.0
new: 19.0
path: .spaces[1].metrics.loc.lloc
old: 16.0
new: 6.0
path: .spaces[1].metrics.loc.blank
old: 5.0
new: 4.0
path: .spaces[1].metrics.loc.ploc
old: 20.0
new: 15.0
path: .spaces[1].metrics.nargs.average
old: 1.0
new: 2.0
path: .spaces[1].metrics.nargs.sum
old: 1.0
new: 2.0
path: .spaces[1].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[1].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[1].metrics.cyclomatic.average
old: 5.0
new: 1.0
path: .spaces[1].metrics.cyclomatic.sum
old: 5.0
new: 1.0
path: .spaces[1].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[1].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[1].metrics.mi.mi_original
old: 88.25827833326333
new: 90.94313305919144
path: .spaces[1].metrics.mi.mi_sei
old: 52.1380277738064
new: 55.60417493479237
path: .spaces[1].metrics.mi.mi_visual_studio
old: 51.61302826506627
new: 53.18311874806518
Code
TEST(SeekableStreamWrapper, NoWrap)
{
nsTArray inputData;
testing::CreateData(4096, inputData);
nsDependentCSubstring inputString(inputData.Elements(), inputData.Length());
nsCOMPtr stream;
nsresult rv = NS_NewCStringInputStream(getter_AddRefs(stream), inputString);
ASSERT_TRUE(NS_SUCCEEDED(rv));
nsCOMPtr wrapped;
rv = mozilla::SeekableStreamWrapper::MaybeWrap(do_AddRef(stream),
getter_AddRefs(wrapped));
ASSERT_TRUE(NS_SUCCEEDED(rv));
EXPECT_EQ(stream, wrapped);
testing::ConsumeAndValidateStream(wrapped, inputString);
}