Global Metrics

path: .metrics.cognitive.sum
old: 1.0
new: 0.0

path: .metrics.cognitive.average
old: 0.5
new: 0.0

path: .metrics.cyclomatic.sum
old: 6.0
new: 20.0

path: .metrics.cyclomatic.average
old: 1.2
new: 1.0

path: .metrics.halstead.effort
old: 963.8904003901164
new: 249982.31781798633

path: .metrics.halstead.length
old: 41.0
new: 789.0

path: .metrics.halstead.N2
old: 18.0
new: 368.0

path: .metrics.halstead.time
old: 53.54946668833979
new: 13887.906545443686

path: .metrics.halstead.N1
old: 23.0
new: 421.0

path: .metrics.halstead.volume
old: 190.3981037807637
new: 5057.009448612646

path: .metrics.halstead.n2
old: 16.0
new: 67.0

path: .metrics.halstead.level
old: 0.19753086419753085
new: 0.020229468599033816

path: .metrics.halstead.bugs
old: 0.032525989338936
new: 1.3227718343174604

path: .metrics.halstead.difficulty
old: 5.0625
new: 49.43283582089552

path: .metrics.halstead.estimated_program_length
old: 92.5293250129808
new: 481.4866257866323

path: .metrics.halstead.purity_ratio
old: 2.2568128051946537
new: 0.6102492088550473

path: .metrics.halstead.vocabulary
old: 25.0
new: 85.0

path: .metrics.halstead.n1
old: 9.0
new: 18.0

path: .metrics.loc.cloc
old: 16.0
new: 65.0

path: .metrics.loc.sloc
old: 37.0
new: 265.0

path: .metrics.loc.lloc
old: 5.0
new: 47.0

path: .metrics.loc.blank
old: 1.0
new: 51.0

path: .metrics.loc.ploc
old: 20.0
new: 149.0

path: .metrics.nexits.sum
old: 1.0
new: 4.0

path: .metrics.nexits.average
old: 0.5
new: 0.26666666666666666

path: .metrics.nargs.average
old: 0.5
new: 0.9333333333333332

path: .metrics.nargs.sum
old: 1.0
new: 14.0

path: .metrics.nom.total
old: 2.0
new: 15.0

path: .metrics.nom.functions
old: 2.0
new: 15.0

path: .metrics.mi.mi_sei
old: 88.42038473293181
new: 6.7193704208199705

path: .metrics.mi.mi_original
old: 83.82772056666383
new: 31.66001785761931

path: .metrics.mi.mi_visual_studio
old: 49.02205881091452
new: 18.51463032609316

Spaces Data

Minimal test - lines (23, 23)

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_original
old: 105.25740298808512
new: 155.7127700178179

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_sei
old: 118.80963679844396
new: 149.04700897518126

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 61.5540368351375
new: 91.0600994256245

path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.average
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.average
old: 2.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.blank
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.ploc
old: 7.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.lloc
old: 4.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.sloc
old: 14.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.cloc
old: 6.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N1
old: 15.0
new: 4.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 40.13896548741762
new: 9.509775004326936

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.length
old: 20.0
new: 7.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.effort
old: 342.6619429851844
new: 27.14210625757214

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n2
old: 5.0
new: 3.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n1
old: 9.0
new: 3.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.level
old: 0.2222222222222222
new: 0.6666666666666666

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.bugs
old: 0.01632259960095138
new: 0.003010517177243676

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.vocabulary
old: 14.0
new: 6.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N2
old: 5.0
new: 3.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 2.006948274370881
new: 1.3585392863324195

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.volume
old: 76.14709844115208
new: 18.094737505048094

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.difficulty
old: 4.5
new: 1.5

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.time
old: 19.03677461028802
new: 1.5078947920873411

path: .spaces[0].spaces[0].spaces[0].metrics.nexits.sum
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.nexits.average
old: 1.0
new: 0.0

Code

  MockCurrentTimeGetter() : mTime(0) {}

Minimal test - lines (21, 32)

path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 4.0
new: 5.0

path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.3333333333333333
new: 1.0

path: .spaces[0].spaces[0].metrics.nargs.sum
old: 1.0
new: 2.0

path: .spaces[0].spaces[0].metrics.halstead.n1
old: 9.0
new: 7.0

path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.027683138627893834
new: 0.03285258339450886

path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.7290500007867158
new: 1.302184039659028

path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 5.5
new: 6.611111111111111

path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 57.05865002596162
new: 48.18080946738404

path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 18.0
new: 16.0

path: .spaces[0].spaces[0].metrics.halstead.length
old: 33.0
new: 37.0

path: .spaces[0].spaces[0].metrics.halstead.time
old: 42.04674376454332
new: 54.35802469135802

path: .spaces[0].spaces[0].metrics.halstead.volume
old: 137.6075250475963
new: 148.0

path: .spaces[0].spaces[0].metrics.halstead.N2
old: 11.0
new: 17.0

path: .spaces[0].spaces[0].metrics.halstead.N1
old: 22.0
new: 20.0

path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.18181818181818185
new: 0.1512605042016807

path: .spaces[0].spaces[0].metrics.halstead.effort
old: 756.8413877617797
new: 978.4444444444443

path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 97.07548730487515
new: 95.90719193474024

path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 55.203627528641064
new: 60.59006342097134

path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 94.39820307397622
new: 103.609008449861

path: .spaces[0].spaces[0].metrics.loc.blank
old: 4.0
new: 2.0

path: .spaces[0].spaces[0].metrics.loc.cloc
old: 6.0
new: 1.0

path: .spaces[0].spaces[0].metrics.loc.ploc
old: 12.0
new: 9.0

path: .spaces[0].spaces[0].metrics.loc.lloc
old: 5.0
new: 1.0

path: .spaces[0].spaces[0].metrics.loc.sloc
old: 22.0
new: 12.0

path: .spaces[0].spaces[0].metrics.nexits.average
old: 0.5
new: 0.25

path: .spaces[0].spaces[0].metrics.nom.functions
old: 2.0
new: 4.0

path: .spaces[0].spaces[0].metrics.nom.total
old: 2.0
new: 4.0

path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].metrics.cognitive.average
old: 0.5
new: 0.0

Code

class MockCurrentTimeGetter {
 public:
  MockCurrentTimeGetter() : mTime(0) {}
  explicit MockCurrentTimeGetter(Time aTime) : mTime(aTime) {}

  // Methods needed for CurrentTimeGetter compatibility
  Time GetCurrentTime() const { return mTime; }
  void GetTimeAsyncForPossibleBackwardsSkew(const TimeStamp& aNow) {}

 private:
  Time mTime;
};

Minimal test - lines (15, 95)

path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 4.0

path: .spaces[0].metrics.nexits.average
old: 0.5
new: 0.4

path: .spaces[0].metrics.cyclomatic.sum
old: 5.0
new: 14.0

path: .spaces[0].metrics.cyclomatic.average
old: 1.25
new: 1.0

path: .spaces[0].metrics.halstead.n2
old: 10.0
new: 24.0

path: .spaces[0].metrics.halstead.length
old: 35.0
new: 144.0

path: .spaces[0].metrics.halstead.bugs
old: 0.028794177640427535
new: 0.17655665274402377

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.7642458846244125
new: 1.0982278913412635

path: .spaces[0].metrics.halstead.volume
old: 148.67746297052548
new: 750.1612846505689

path: .spaces[0].metrics.halstead.N2
old: 12.0
new: 60.0

path: .spaces[0].metrics.halstead.vocabulary
old: 19.0
new: 37.0

path: .spaces[0].metrics.halstead.difficulty
old: 5.4
new: 16.25

path: .spaces[0].metrics.halstead.N1
old: 23.0
new: 84.0

path: .spaces[0].metrics.halstead.effort
old: 802.8583000408377
new: 12190.120875571743

path: .spaces[0].metrics.halstead.time
old: 44.603238891157645
new: 677.2289375317636

path: .spaces[0].metrics.halstead.estimated_program_length
old: 61.74860596185444
new: 158.14481635314195

path: .spaces[0].metrics.halstead.level
old: 0.18518518518518515
new: 0.06153846153846154

path: .spaces[0].metrics.halstead.n1
old: 9.0
new: 13.0

path: .spaces[0].metrics.nargs.sum
old: 1.0
new: 4.0

path: .spaces[0].metrics.nargs.average
old: 0.5
new: 0.4

path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0

path: .spaces[0].metrics.cognitive.average
old: 0.5
new: 0.0

path: .spaces[0].metrics.loc.cloc
old: 7.0
new: 26.0

path: .spaces[0].metrics.loc.sloc
old: 24.0
new: 81.0

path: .spaces[0].metrics.loc.lloc
old: 5.0
new: 9.0

path: .spaces[0].metrics.loc.ploc
old: 14.0
new: 42.0

path: .spaces[0].metrics.loc.blank
old: 3.0
new: 13.0

path: .spaces[0].metrics.mi.mi_sei
old: 95.17067135877048
new: 53.87274130533392

path: .spaces[0].metrics.mi.mi_visual_studio
old: 54.00951794390576
new: 36.353464853990715

path: .spaces[0].metrics.mi.mi_original
old: 92.35627568407884
new: 62.16442490032412

path: .spaces[0].metrics.nom.total
old: 2.0
new: 10.0

path: .spaces[0].metrics.nom.functions
old: 2.0
new: 10.0

Code

namespace {

// This class provides a mock implementation of the CurrentTimeGetter template
// type used in SystemTimeConverter. It can be constructed with a particular
// Time and always returns that Time.
template 
class MockCurrentTimeGetter {
 public:
  MockCurrentTimeGetter() : mTime(0) {}
  explicit MockCurrentTimeGetter(Time aTime) : mTime(aTime) {}

  // Methods needed for CurrentTimeGetter compatibility
  Time GetCurrentTime() const { return mTime; }
  void GetTimeAsyncForPossibleBackwardsSkew(const TimeStamp& aNow) {}

 private:
  Time mTime;
};

// This is another mock implementation of the CurrentTimeGetter template
// type used in SystemTimeConverter, except this asserts that it will not be
// used. i.e. it should only be used in calls to SystemTimeConverter that we
// know will not invoke it.
template 
class UnusedCurrentTimeGetter {
 public:
  Time GetCurrentTime() const {
    EXPECT_TRUE(false);
    return 0;
  }

  void GetTimeAsyncForPossibleBackwardsSkew(const TimeStamp& aNow) {
    EXPECT_TRUE(false);
  }
};

// This class provides a mock implementation of the TimeStampNowProvider
// template type used in SystemTimeConverter. It also has other things in it
// that allow the test to better control time for testing purposes.
class MockTimeStamp {
 public:
  // This should generally be called at the start of every test function, as
  // it will initialize this class's static fields to sane values. In particular
  // it will initialize the baseline TimeStamp against which all other
  // TimeStamps are compared.
  static void Init() {
    sBaseline = TimeStamp::Now();
    sTimeStamp = sBaseline;
  }

  // Advance the timestamp returned by `MockTimeStamp::Now()`
  static void Advance(double ms) {
    sTimeStamp += TimeDuration::FromMilliseconds(ms);
  }

  // Returns the baseline TimeStamp, that is used as a fixed reference point
  // in time against which other TimeStamps can be compared. This is needed
  // because mozilla::TimeStamp itself doesn't provide any conversion to
  // human-readable strings, and we need to convert it to a TimeDuration in
  // order to get that. This baseline TimeStamp can be used to turn an
  // arbitrary TimeStamp into a TimeDuration.
  static TimeStamp Baseline() { return sBaseline; }

  // This is the method needed for TimeStampNowProvider compatibility, and
  // simulates `TimeStamp::Now()`
  static TimeStamp Now() { return sTimeStamp; }

 private:
  static TimeStamp sTimeStamp;
  static TimeStamp sBaseline;
};

TimeStamp MockTimeStamp::sTimeStamp;
TimeStamp MockTimeStamp::sBaseline;

// Could have platform-specific implementations of this using DWORD, guint32,
// etc behind ifdefs. But this is sufficient for now.
using GTestTime = uint32_t;
using TimeConverter = SystemTimeConverter;

}  // namespace

Minimal test - lines (24, 24)

path: .spaces[0].spaces[0].spaces[1].metrics.loc.sloc
old: 3.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.ploc
old: 3.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.lloc
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_sei
old: 117.79378094715908
new: 146.54249035246173

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 78.39162755953055
new: 90.04489473439764

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_original
old: 134.04968312679725
new: 153.97676999581998

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.vocabulary
old: 11.0
new: 7.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n1
old: 6.0
new: 3.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.effort
old: 114.1612434150308
new: 47.374114309722074

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.volume
old: 38.05374780501027
new: 25.26619429851844

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.bugs
old: 0.007844366425165714
new: 0.00436421510092632

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.level
old: 0.3333333333333333
new: 0.5333333333333333

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n2
old: 5.0
new: 4.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.length
old: 11.0
new: 9.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 2.465401407160341
new: 1.4172097224626077

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.time
old: 6.342291300835045
new: 2.6318952394290043

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 27.11941547876375
new: 12.754887502163468

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.difficulty
old: 3.0
new: 1.875

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.N1
old: 6.0
new: 4.0

Code

  explicit MockCurrentTimeGetter(Time aTime) : mTime(aTime) {}