Global Metrics
path: .metrics.halstead.N1
old: 216.0
new: 1739.0
path: .metrics.halstead.time
old: 2354.3829372079153
new: 145481.2162417022
path: .metrics.halstead.n2
old: 66.0
new: 176.0
path: .metrics.halstead.estimated_program_length
old: 479.6406346330861
new: 1447.4659026977772
path: .metrics.halstead.vocabulary
old: 85.0
new: 204.0
path: .metrics.halstead.N2
old: 132.0
new: 1377.0
path: .metrics.halstead.effort
old: 42378.89286974248
new: 2618661.8923506397
path: .metrics.halstead.length
old: 348.0
new: 3116.0
path: .metrics.halstead.volume
old: 2230.46804577592
new: 23907.27736558318
path: .metrics.halstead.difficulty
old: 19.0
new: 109.5340909090909
path: .metrics.halstead.level
old: 0.05263157894736842
new: 0.009129577757028738
path: .metrics.halstead.n1
old: 19.0
new: 28.0
path: .metrics.halstead.bugs
old: 0.4051773407776535
new: 6.332837790236661
path: .metrics.halstead.purity_ratio
old: 1.3782776857272587
new: 0.4645269264113534
path: .metrics.nargs.sum
old: 5.0
new: 59.0
path: .metrics.nargs.average
old: 0.8333333333333334
new: 1.5526315789473684
path: .metrics.cyclomatic.average
old: 2.857142857142857
new: 1.1578947368421053
path: .metrics.cyclomatic.sum
old: 20.0
new: 44.0
path: .metrics.loc.blank
old: 26.0
new: 141.0
path: .metrics.loc.cloc
old: 9.0
new: 28.0
path: .metrics.loc.sloc
old: 121.0
new: 656.0
path: .metrics.loc.lloc
old: 42.0
new: 174.0
path: .metrics.loc.ploc
old: 86.0
new: 487.0
path: .metrics.cognitive.average
old: 2.1666666666666665
new: 0.15789473684210523
path: .metrics.cognitive.sum
old: 13.0
new: 6.0
path: .metrics.nexits.sum
old: 17.0
new: 15.0
path: .metrics.nexits.average
old: 2.8333333333333335
new: 0.3947368421052632
path: .metrics.nom.closures
old: 0.0
new: 3.0
path: .metrics.nom.total
old: 6.0
new: 38.0
path: .metrics.nom.functions
old: 6.0
new: 35.0
path: .metrics.mi.mi_visual_studio
old: 28.43062349327495
new: 1.975506820502632
path: .metrics.mi.mi_original
old: 48.61636617350017
new: 3.378116663059501
path: .metrics.mi.mi_sei
old: 16.976562243833712
new: -50.615964284557165
Spaces Data
Minimal test - lines (17, 35)
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 15.0
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 19.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[0].metrics.halstead.time
old: 5.2832083357371875
new: 226.9788001619635
path: .spaces[0].metrics.halstead.difficulty
old: 3.0
new: 15.363636363636363
path: .spaces[0].metrics.halstead.length
old: 10.0
new: 58.0
path: .spaces[0].metrics.halstead.n2
old: 3.0
new: 11.0
path: .spaces[0].metrics.halstead.n1
old: 6.0
new: 13.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 2.0264662506490403
new: 1.485508002428353
path: .spaces[0].metrics.halstead.vocabulary
old: 9.0
new: 24.0
path: .spaces[0].metrics.halstead.level
old: 0.3333333333333333
new: 0.0650887573964497
path: .spaces[0].metrics.halstead.estimated_program_length
old: 20.264662506490403
new: 86.15946414084446
path: .spaces[0].metrics.halstead.effort
old: 95.09775004326936
new: 4085.6184029153433
path: .spaces[0].metrics.halstead.N2
old: 3.0
new: 26.0
path: .spaces[0].metrics.halstead.volume
old: 31.69925001442312
new: 265.9278250418271
path: .spaces[0].metrics.halstead.bugs
old: 0.006944786620971931
new: 0.08518908350677537
path: .spaces[0].metrics.halstead.N1
old: 7.0
new: 32.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 3.0
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.nargs.average
old: 0.0
new: 0.5
path: .spaces[0].metrics.mi.mi_sei
old: 144.8408406278255
new: 59.60814144856013
path: .spaces[0].metrics.mi.mi_visual_studio
old: 89.35513233151332
new: 54.72357828206058
path: .spaces[0].metrics.mi.mi_original
old: 152.79727628688778
new: 93.5773188623236
path: .spaces[0].metrics.nexits.average
old: 1.0
new: 0.5
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 2.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 2.0
Code
class InputStreamCallback final : public nsIInputStreamCallback {
nsCOMPtr mStream;
nsCOMPtr mCallback;
public:
NS_DECL_THREADSAFE_ISUPPORTS
InputStreamCallback(nsIAsyncInputStream* aStream,
nsIInputStreamCallback* aCallback)
: mStream(aStream), mCallback(aCallback) {}
NS_IMETHOD
OnInputStreamReady(nsIAsyncInputStream* aStream) override {
return mCallback->OnInputStreamReady(mStream);
}
private:
~InputStreamCallback() = default;
};
Minimal test - lines (141, 158)
path: .spaces[4].metrics.loc.sloc
old: 8.0
new: 18.0
path: .spaces[4].metrics.loc.blank
old: 1.0
new: 3.0
path: .spaces[4].metrics.loc.lloc
old: 3.0
new: 5.0
path: .spaces[4].metrics.loc.ploc
old: 7.0
new: 15.0
path: .spaces[4].metrics.nexits.average
old: 2.0
new: 0.0
path: .spaces[4].metrics.nexits.sum
old: 2.0
new: 0.0
path: .spaces[4].metrics.halstead.bugs
old: 0.029027422118425537
new: 0.11776453259389048
path: .spaces[4].metrics.halstead.estimated_program_length
old: 44.82892142331043
new: 152.14764132514549
path: .spaces[4].metrics.halstead.n1
old: 10.0
new: 13.0
path: .spaces[4].metrics.halstead.N1
old: 18.0
new: 56.0
path: .spaces[4].metrics.halstead.purity_ratio
old: 1.7241892855119398
new: 1.506412290347975
path: .spaces[4].metrics.halstead.level
old: 0.125
new: 0.07863247863247863
path: .spaces[4].metrics.halstead.time
old: 45.146291327031776
new: 368.91910472248674
path: .spaces[4].metrics.halstead.effort
old: 812.6332438865719
new: 6640.543885004761
path: .spaces[4].metrics.halstead.n2
old: 5.0
new: 23.0
path: .spaces[4].metrics.halstead.vocabulary
old: 15.0
new: 36.0
path: .spaces[4].metrics.halstead.N2
old: 8.0
new: 45.0
path: .spaces[4].metrics.halstead.volume
old: 101.57915548582147
new: 522.1624251456735
path: .spaces[4].metrics.halstead.difficulty
old: 8.0
new: 12.717391304347826
path: .spaces[4].metrics.halstead.length
old: 26.0
new: 101.0
path: .spaces[4].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[4].metrics.nargs.average
old: 0.0
new: 2.0
path: .spaces[4].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[4].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[4].metrics.cyclomatic.average
old: 2.0
new: 1.0
path: .spaces[4].metrics.cyclomatic.sum
old: 2.0
new: 1.0
path: .spaces[4].metrics.mi.mi_visual_studio
old: 65.97934947175618
new: 53.45291712777858
path: .spaces[4].metrics.mi.mi_sei
old: 87.27440501240619
new: 56.269769836205995
path: .spaces[4].metrics.mi.mi_original
old: 112.82468759670306
new: 91.40448828850138
Code
TEST(TestSlicedInputStream, Simple)
{
const size_t kBufSize = 4096;
nsCString buf;
RefPtr sis =
CreateSeekableStreams(kBufSize, 0, kBufSize, buf);
uint64_t length;
ASSERT_EQ(NS_OK, sis->Available(&length));
ASSERT_EQ((uint64_t)kBufSize, length);
char buf2[kBufSize];
uint32_t count;
ASSERT_EQ(NS_OK, sis->Read(buf2, sizeof(buf2), &count));
ASSERT_EQ(count, buf.Length());
ASSERT_TRUE(nsCString(buf.get()).Equals(nsCString(buf2)));
}
Minimal test - lines (112, 123)
path: .spaces[2].metrics.halstead.n1
old: 7.0
new: 17.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 43.65148445440323
new: 144.5455183272174
path: .spaces[2].metrics.halstead.N1
old: 11.0
new: 43.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 2.1825742227201617
new: 1.927273577696232
path: .spaces[2].metrics.halstead.vocabulary
old: 15.0
new: 35.0
path: .spaces[2].metrics.halstead.effort
old: 307.6676344041709
new: 5813.187419204295
path: .spaces[2].metrics.halstead.N2
old: 9.0
new: 32.0
path: .spaces[2].metrics.halstead.volume
old: 78.13781191217038
new: 384.6962262708725
path: .spaces[2].metrics.halstead.time
old: 17.09264635578727
new: 322.95485662246085
path: .spaces[2].metrics.halstead.level
old: 0.25396825396825395
new: 0.0661764705882353
path: .spaces[2].metrics.halstead.n2
old: 8.0
new: 18.0
path: .spaces[2].metrics.halstead.difficulty
old: 3.9375
new: 15.11111111111111
path: .spaces[2].metrics.halstead.length
old: 20.0
new: 75.0
path: .spaces[2].metrics.halstead.bugs
old: 0.015191475358116192
new: 0.10776762087110206
path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[2].metrics.cognitive.average
old: 0.0
new: 1.0
path: .spaces[2].metrics.nargs.sum
old: 1.0
new: 0.0
path: .spaces[2].metrics.nargs.average
old: 1.0
new: 0.0
path: .spaces[2].metrics.mi.mi_sei
old: 100.45743031615037
new: 67.80821297904086
path: .spaces[2].metrics.mi.mi_visual_studio
old: 71.36435120802044
new: 58.08874355119145
path: .spaces[2].metrics.mi.mi_original
old: 122.03304056571494
new: 99.33175147253738
path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[2].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[2].metrics.loc.lloc
old: 3.0
new: 5.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[2].metrics.loc.ploc
old: 5.0
new: 11.0
path: .spaces[2].metrics.loc.sloc
old: 5.0
new: 12.0
Code
static SlicedInputStream* CreateSeekableStreams(uint32_t aSize, uint64_t aStart,
uint64_t aLength,
nsCString& aBuffer) {
aBuffer.SetLength(aSize);
for (uint32_t i = 0; i < aSize; ++i) {
aBuffer.BeginWriting()[i] = i % 10;
}
nsCOMPtr stream;
NS_NewCStringInputStream(getter_AddRefs(stream), aBuffer);
return new SlicedInputStream(stream.forget(), aStart, aLength);
}
Minimal test - lines (44, 107)
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 1.181818181818182
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 13.0
path: .spaces[1].metrics.mi.mi_visual_studio
old: 77.54987902751634
new: 36.81103406471366
path: .spaces[1].metrics.mi.mi_sei
old: 115.71718014704972
new: 16.435940844963895
path: .spaces[1].metrics.mi.mi_original
old: 132.6102931370529
new: 62.94686825066036
path: .spaces[1].metrics.nexits.average
old: 1.0
new: 0.9
path: .spaces[1].metrics.nexits.sum
old: 1.0
new: 9.0
path: .spaces[1].metrics.nargs.average
old: 0.0
new: 1.6
path: .spaces[1].metrics.nargs.sum
old: 0.0
new: 16.0
path: .spaces[1].metrics.halstead.effort
old: 200.75790004038475
new: 29604.80534581721
path: .spaces[1].metrics.halstead.length
old: 14.0
new: 236.0
path: .spaces[1].metrics.halstead.n1
old: 8.0
new: 18.0
path: .spaces[1].metrics.halstead.volume
old: 50.18947501009619
new: 1405.1903292513025
path: .spaces[1].metrics.halstead.difficulty
old: 4.0
new: 21.068181818181817
path: .spaces[1].metrics.halstead.purity_ratio
old: 2.2857142857142856
new: 1.3359052595169605
path: .spaces[1].metrics.halstead.N1
old: 10.0
new: 133.0
path: .spaces[1].metrics.halstead.bugs
old: 0.011428621282029669
new: 0.31899721040412315
path: .spaces[1].metrics.halstead.vocabulary
old: 12.0
new: 62.0
path: .spaces[1].metrics.halstead.time
old: 11.153216668910265
new: 1644.711408100956
path: .spaces[1].metrics.halstead.n2
old: 4.0
new: 44.0
path: .spaces[1].metrics.halstead.estimated_program_length
old: 32.0
new: 315.2736412460027
path: .spaces[1].metrics.halstead.N2
old: 4.0
new: 103.0
path: .spaces[1].metrics.halstead.level
old: 0.25
new: 0.04746494066882417
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 14.0
path: .spaces[1].metrics.loc.lloc
old: 1.0
new: 14.0
path: .spaces[1].metrics.loc.ploc
old: 3.0
new: 50.0
path: .spaces[1].metrics.loc.sloc
old: 3.0
new: 64.0
path: .spaces[1].metrics.cognitive.average
old: 0.0
new: 0.2
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[1].metrics.nom.total
old: 1.0
new: 10.0
path: .spaces[1].metrics.nom.functions
old: 1.0
new: 10.0
Code
class NonSeekableStringStream final : public nsIAsyncInputStream {
nsCOMPtr mStream;
public:
NS_DECL_THREADSAFE_ISUPPORTS
explicit NonSeekableStringStream(const nsACString& aBuffer) {
NS_NewCStringInputStream(getter_AddRefs(mStream), aBuffer);
}
explicit NonSeekableStringStream(nsIInputStream* aStream)
: mStream(aStream) {}
NS_IMETHOD
Available(uint64_t* aLength) override { return mStream->Available(aLength); }
NS_IMETHOD
Read(char* aBuffer, uint32_t aCount, uint32_t* aReadCount) override {
return mStream->Read(aBuffer, aCount, aReadCount);
}
NS_IMETHOD
ReadSegments(nsWriteSegmentFun aWriter, void* aClosure, uint32_t aCount,
uint32_t* aResult) override {
return mStream->ReadSegments(aWriter, aClosure, aCount, aResult);
}
NS_IMETHOD
Close() override { return mStream->Close(); }
NS_IMETHOD
IsNonBlocking(bool* aNonBlocking) override {
return mStream->IsNonBlocking(aNonBlocking);
}
NS_IMETHOD
CloseWithStatus(nsresult aStatus) override {
nsCOMPtr async = do_QueryInterface(mStream);
if (!async) {
MOZ_CRASH("This should not happen.");
return NS_ERROR_FAILURE;
}
return async->CloseWithStatus(aStatus);
}
NS_IMETHOD
AsyncWait(nsIInputStreamCallback* aCallback, uint32_t aFlags,
uint32_t aRequestedCount, nsIEventTarget* aEventTarget) override {
nsCOMPtr async = do_QueryInterface(mStream);
if (!async) {
MOZ_CRASH("This should not happen.");
return NS_ERROR_FAILURE;
}
RefPtr callback =
new InputStreamCallback(this, aCallback);
return async->AsyncWait(callback, aFlags, aRequestedCount, aEventTarget);
}
private:
~NonSeekableStringStream() = default;
};
Minimal test - lines (161, 177)
path: .spaces[5].metrics.cognitive.sum
old: 12.0
new: 0.0
path: .spaces[5].metrics.cognitive.average
old: 12.0
new: 0.0
path: .spaces[5].metrics.loc.lloc
old: 32.0
new: 5.0
path: .spaces[5].metrics.loc.sloc
old: 68.0
new: 17.0
path: .spaces[5].metrics.loc.blank
old: 11.0
new: 3.0
path: .spaces[5].metrics.loc.ploc
old: 53.0
new: 14.0
path: .spaces[5].metrics.loc.cloc
old: 4.0
new: 0.0
path: .spaces[5].metrics.halstead.n1
old: 17.0
new: 15.0
path: .spaces[5].metrics.halstead.n2
old: 43.0
new: 24.0
path: .spaces[5].metrics.halstead.bugs
old: 0.24245130792033273
new: 0.1395106782504896
path: .spaces[5].metrics.halstead.length
old: 210.0
new: 108.0
path: .spaces[5].metrics.halstead.vocabulary
old: 60.0
new: 39.0
path: .spaces[5].metrics.halstead.effort
old: 19616.371559369687
new: 8562.351594556843
path: .spaces[5].metrics.halstead.N2
old: 80.0
new: 48.0
path: .spaces[5].metrics.halstead.volume
old: 1240.447025077789
new: 570.8234396371229
path: .spaces[5].metrics.halstead.purity_ratio
old: 1.4419821559687902
new: 1.5615042495503288
path: .spaces[5].metrics.halstead.estimated_program_length
old: 302.81625275344595
new: 168.64245895143551
path: .spaces[5].metrics.halstead.level
old: 0.06323529411764706
new: 0.06666666666666667
path: .spaces[5].metrics.halstead.difficulty
old: 15.813953488372093
new: 15.0
path: .spaces[5].metrics.halstead.N1
old: 130.0
new: 60.0
path: .spaces[5].metrics.halstead.time
old: 1089.7984199649827
new: 475.6861996976024
path: .spaces[5].metrics.mi.mi_sei
old: 34.30234892064837
new: 56.937217983477595
path: .spaces[5].metrics.mi.mi_original
old: 62.61319426796102
new: 91.86712808995269
path: .spaces[5].metrics.mi.mi_visual_studio
old: 36.615903080678954
new: 53.72346671927057
path: .spaces[5].metrics.nexits.average
old: 11.0
new: 0.0
path: .spaces[5].metrics.nexits.sum
old: 11.0
new: 0.0
path: .spaces[5].metrics.cyclomatic.sum
old: 13.0
new: 1.0
path: .spaces[5].metrics.cyclomatic.average
old: 13.0
new: 1.0
Code
TEST(TestSlicedInputStream, Sliced)
{
const size_t kBufSize = 4096;
nsCString buf;
RefPtr sis = CreateSeekableStreams(kBufSize, 10, 100, buf);
uint64_t length;
ASSERT_EQ(NS_OK, sis->Available(&length));
ASSERT_EQ((uint64_t)100, length);
char buf2[kBufSize / 2];
uint32_t count;
ASSERT_EQ(NS_OK, sis->Read(buf2, sizeof(buf2), &count));
ASSERT_EQ((uint64_t)100, count);
ASSERT_TRUE(nsCString(buf.get() + 10, count).Equals(nsCString(buf2, count)));
}
Minimal test - lines (127, 138)
path: .spaces[3].metrics.mi.mi_sei
old: 106.89188477223811
new: 68.23965629082635
path: .spaces[3].metrics.mi.mi_visual_studio
old: 73.97255235695529
new: 58.26362876472102
path: .spaces[3].metrics.mi.mi_original
old: 126.49306453039355
new: 99.63080518767292
path: .spaces[3].metrics.loc.sloc
old: 4.0
new: 12.0
path: .spaces[3].metrics.loc.ploc
old: 4.0
new: 11.0
path: .spaces[3].metrics.loc.lloc
old: 2.0
new: 4.0
path: .spaces[3].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[3].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[3].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[3].metrics.halstead.level
old: 0.2857142857142857
new: 0.06274509803921569
path: .spaces[3].metrics.halstead.difficulty
old: 3.5
new: 15.9375
path: .spaces[3].metrics.halstead.n1
old: 7.0
new: 17.0
path: .spaces[3].metrics.halstead.vocabulary
old: 15.0
new: 33.0
path: .spaces[3].metrics.halstead.N1
old: 9.0
new: 42.0
path: .spaces[3].metrics.halstead.effort
old: 232.45999043870685
new: 5788.442251963825
path: .spaces[3].metrics.halstead.n2
old: 8.0
new: 16.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 2.567734379670778
new: 1.8539842819618857
path: .spaces[3].metrics.halstead.estimated_program_length
old: 43.65148445440323
new: 133.48686830125575
path: .spaces[3].metrics.halstead.time
old: 12.914443913261492
new: 321.58012510910135
path: .spaces[3].metrics.halstead.volume
old: 66.41714012534482
new: 363.1963765938086
path: .spaces[3].metrics.halstead.length
old: 17.0
new: 72.0
path: .spaces[3].metrics.halstead.N2
old: 8.0
new: 30.0
path: .spaces[3].metrics.halstead.bugs
old: 0.01260213774735643
new: 0.10746157840586544
path: .spaces[3].metrics.nargs.sum
old: 2.0
new: 0.0
path: .spaces[3].metrics.nargs.average
old: 2.0
new: 0.0
path: .spaces[3].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[3].metrics.cognitive.average
old: 0.0
new: 1.0
Code
static SlicedInputStream* CreateNonSeekableStreams(uint32_t aSize,
uint64_t aStart,
uint64_t aLength,
nsCString& aBuffer) {
aBuffer.SetLength(aSize);
for (uint32_t i = 0; i < aSize; ++i) {
aBuffer.BeginWriting()[i] = i % 10;
}
RefPtr stream = new NonSeekableStringStream(aBuffer);
return new SlicedInputStream(stream.forget(), aStart, aLength);
}