Global Metrics

path: .metrics.halstead.bugs
old: 0.30566237475747
new: 4.7449902865353

path: .metrics.halstead.vocabulary
old: 61.0
new: 122.0

path: .metrics.halstead.n2
old: 39.0
new: 100.0

path: .metrics.halstead.volume
old: 1186.1474675125774
new: 15933.765139057075

path: .metrics.halstead.N1
old: 117.0
new: 1330.0

path: .metrics.halstead.level
old: 0.04271631982475356
new: 0.009381743127873158

path: .metrics.halstead.estimated_program_length
old: 304.23818214564824
new: 762.493114587493

path: .metrics.halstead.length
old: 200.0
new: 2299.0

path: .metrics.halstead.N2
old: 83.0
new: 969.0

path: .metrics.halstead.difficulty
old: 23.41025641025641
new: 106.59

path: .metrics.halstead.time
old: 1542.6675752692067
new: 94354.44589844966

path: .metrics.halstead.effort
old: 27768.01635484572
new: 1698380.0261720938

path: .metrics.halstead.purity_ratio
old: 1.521190910728241
new: 0.3316629467540204

path: .metrics.cognitive.sum
old: 22.0
new: 7.0

path: .metrics.cognitive.average
old: 7.333333333333333
new: 0.25

path: .metrics.loc.ploc
old: 41.0
new: 431.0

path: .metrics.loc.sloc
old: 69.0
new: 573.0

path: .metrics.loc.blank
old: 10.0
new: 104.0

path: .metrics.loc.cloc
old: 18.0
new: 38.0

path: .metrics.loc.lloc
old: 17.0
new: 185.0

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

path: .metrics.nargs.average
old: 0.3333333333333333
new: 1.7142857142857142

path: .metrics.mi.mi_original
old: 61.68945188282336
new: 5.379433592067542

path: .metrics.mi.mi_visual_studio
old: 36.075702855452256
new: 3.1458675977003168

path: .metrics.mi.mi_sei
old: 50.59100897074064
new: -43.01907737010523

path: .metrics.cyclomatic.average
old: 3.4
new: 2.16

path: .metrics.cyclomatic.sum
old: 17.0
new: 54.0

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

path: .metrics.nexits.average
old: 0.6666666666666666
new: 0.14285714285714285

path: .metrics.nom.closures
old: 0.0
new: 4.0

path: .metrics.nom.functions
old: 3.0
new: 24.0

path: .metrics.nom.total
old: 3.0
new: 28.0

Spaces Data

Minimal test - lines (34, 158)

path: .spaces[0].metrics.loc.cloc
old: 3.0
new: 31.0

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

path: .spaces[0].metrics.loc.ploc
old: 6.0
new: 80.0

path: .spaces[0].metrics.loc.sloc
old: 10.0
new: 125.0

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

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

path: .spaces[0].metrics.nargs.average
old: 0.0
new: 2.0

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

path: .spaces[0].metrics.mi.mi_sei
old: 125.78679535029757
new: 30.736387781249192

path: .spaces[0].metrics.mi.mi_visual_studio
old: 66.38347494149352
new: 28.97239221031045

path: .spaces[0].metrics.mi.mi_original
old: 113.51574214995392
new: 49.54279067963087

path: .spaces[0].metrics.halstead.difficulty
old: 4.0
new: 28.0531914893617

path: .spaces[0].metrics.halstead.vocabulary
old: 9.0
new: 56.0

path: .spaces[0].metrics.halstead.N2
old: 4.0
new: 293.0

path: .spaces[0].metrics.halstead.time
old: 9.861988893376084
new: 6091.204838966047

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.447475893320743
new: 0.43030460778875146

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

path: .spaces[0].metrics.halstead.N1
old: 10.0
new: 380.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 20.264662506490403
new: 289.59500104182973

path: .spaces[0].metrics.halstead.bugs
old: 0.0105285869496718
new: 0.7635940781337625

path: .spaces[0].metrics.halstead.effort
old: 177.51580008076948
new: 109641.68710138884

path: .spaces[0].metrics.halstead.volume
old: 44.37895002019237
new: 3908.3498625447673

path: .spaces[0].metrics.halstead.length
old: 14.0
new: 673.0

path: .spaces[0].metrics.halstead.level
old: 0.25
new: 0.035646568069776265

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

Code

TEST(ObserverArray, Tests)
{
  IntArray arr;
  arr.AppendElement(3);
  arr.AppendElement(4);

  size_t count;
  int testNum = 0;

  // Basic sanity
  static int test1Expected[] = {3, 4};
  DO_TEST(ForwardIterator, test1Expected, {/* nothing */});

  // Appends
  static int test2Expected[] = {3, 4, 2};
  DO_TEST(ForwardIterator, test2Expected,
          if (count == 1) arr.AppendElement(2););
  DO_TEST(ForwardIterator, test2Expected, {/* nothing */});

  DO_TEST(EndLimitedIterator, test2Expected,
          if (count == 1) arr.AppendElement(5););

  static int test5Expected[] = {3, 4, 2, 5};
  DO_TEST(ForwardIterator, test5Expected, {/* nothing */});

  // Removals
  DO_TEST(ForwardIterator, test5Expected,
          if (count == 1) arr.RemoveElementAt(0););

  static int test7Expected[] = {4, 2, 5};
  DO_TEST(ForwardIterator, test7Expected, {/* nothing */});

  static int test8Expected[] = {4, 5};
  DO_TEST(ForwardIterator, test8Expected,
          if (count == 1) arr.RemoveElementAt(1););
  DO_TEST(ForwardIterator, test8Expected, {/* nothing */});

  arr.AppendElement(2);
  arr.AppendElementUnlessExists(6);
  static int test10Expected[] = {4, 5, 2, 6};
  DO_TEST(ForwardIterator, test10Expected, {/* nothing */});

  arr.AppendElementUnlessExists(5);
  DO_TEST(ForwardIterator, test10Expected, {/* nothing */});

  static int test12Expected[] = {4, 5, 6};
  DO_TEST(ForwardIterator, test12Expected,
          if (count == 1) arr.RemoveElementAt(2););
  DO_TEST(ForwardIterator, test12Expected, {/* nothing */});

  // Removals + Appends
  static int test14Expected[] = {4, 6, 7};
  DO_TEST(
      ForwardIterator, test14Expected, if (count == 1) {
        arr.RemoveElementAt(1);
        arr.AppendElement(7);
      });
  DO_TEST(ForwardIterator, test14Expected, {/* nothing */});

  arr.AppendElement(2);
  static int test16Expected[] = {4, 6, 7, 2};
  DO_TEST(ForwardIterator, test16Expected, {/* nothing */});

  static int test17Expected[] = {4, 7, 2};
  DO_TEST(
      EndLimitedIterator, test17Expected, if (count == 1) {
        arr.RemoveElementAt(1);
        arr.AppendElement(8);
      });

  static int test18Expected[] = {4, 7, 2, 8};
  DO_TEST(ForwardIterator, test18Expected, {/* nothing */});

  // Prepends
  arr.PrependElementUnlessExists(3);
  static int test19Expected[] = {3, 4, 7, 2, 8};
  DO_TEST(ForwardIterator, test19Expected, {/* nothing */});

  arr.PrependElementUnlessExists(7);
  DO_TEST(ForwardIterator, test19Expected, {/* nothing */});

  DO_TEST(
      ForwardIterator, test19Expected,
      if (count == 1) { arr.PrependElementUnlessExists(9); });

  static int test22Expected[] = {9, 3, 4, 7, 2, 8};
  DO_TEST(ForwardIterator, test22Expected, {});

  // BackwardIterator
  static int test23Expected[] = {8, 2, 7, 4, 3, 9};
  DO_TEST(BackwardIterator, test23Expected, );

  // Removals
  static int test24Expected[] = {8, 2, 7, 4, 9};
  DO_TEST(BackwardIterator, test24Expected,
          if (count == 1) arr.RemoveElementAt(1););

  // Appends
  DO_TEST(BackwardIterator, test24Expected,
          if (count == 1) arr.AppendElement(1););

  static int test26Expected[] = {1, 8, 2, 7, 4, 9};
  DO_TEST(BackwardIterator, test26Expected, );

  // Prepends
  static int test27Expected[] = {1, 8, 2, 7, 4, 9, 3};
  DO_TEST(BackwardIterator, test27Expected,
          if (count == 1) arr.PrependElementUnlessExists(3););

  // Removal using Iterator
  DO_TEST(BackwardIterator, test27Expected,
          // when this code runs, |GetNext()| has only been called once, so
          // this actually removes the very first element
          if (count == 1) iter.Remove(););

  static int test28Expected[] = {8, 2, 7, 4, 9, 3};
  DO_TEST(BackwardIterator, test28Expected, );

  /**
   * Note: _code is executed before the call to GetNext(), it can therefore not
   * test the case of prepending when the BackwardIterator already returned the
   * first element.
   * In that case BackwardIterator does not traverse the newly prepended Element
   */
}

Minimal test - lines (178, 193)

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

path: .spaces[2].metrics.nargs.average
old: 1.0
new: 2.0

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

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

path: .spaces[2].metrics.mi.mi_original
old: 103.49109068311952
new: 96.22577118445496

path: .spaces[2].metrics.mi.mi_visual_studio
old: 60.521105662643
new: 56.27238080962278

path: .spaces[2].metrics.mi.mi_sei
old: 95.43161297921624
new: 63.327230620325466

path: .spaces[2].metrics.halstead.N2
old: 16.0
new: 27.0

path: .spaces[2].metrics.halstead.n1
old: 10.0
new: 11.0

path: .spaces[2].metrics.halstead.time
old: 76.834277242442
new: 147.10433209818228

path: .spaces[2].metrics.halstead.n2
old: 10.0
new: 16.0

path: .spaces[2].metrics.halstead.vocabulary
old: 20.0
new: 27.0

path: .spaces[2].metrics.halstead.length
old: 40.0
new: 60.0

path: .spaces[2].metrics.halstead.estimated_program_length
old: 66.43856189774725
new: 102.05374780501026

path: .spaces[2].metrics.halstead.purity_ratio
old: 1.660964047443681
new: 1.700895796750171

path: .spaces[2].metrics.halstead.difficulty
old: 8.0
new: 9.28125

path: .spaces[2].metrics.halstead.N1
old: 24.0
new: 33.0

path: .spaces[2].metrics.halstead.effort
old: 1383.016990363956
new: 2647.877977767281

path: .spaces[2].metrics.halstead.volume
old: 172.8771237954945
new: 285.2932501298081

path: .spaces[2].metrics.halstead.level
old: 0.125
new: 0.10774410774410774

path: .spaces[2].metrics.halstead.bugs
old: 0.04137745314661115
new: 0.06379853757458535

path: .spaces[2].metrics.nexits.sum
old: 2.0
new: 0.0

path: .spaces[2].metrics.nexits.average
old: 2.0
new: 0.0

path: .spaces[2].metrics.loc.cloc
old: 1.0
new: 0.0

path: .spaces[2].metrics.loc.ploc
old: 8.0
new: 14.0

path: .spaces[2].metrics.loc.sloc
old: 12.0
new: 16.0

path: .spaces[2].metrics.loc.blank
old: 3.0
new: 2.0

Code

TEST(ObserverArray, RangeBasedFor_Value_Forward_NonEmpty)
{
  IntArray arr;
  arr.AppendElement(3);
  arr.AppendElement(4);

  size_t iterations = 0;
  int sum = 0;
  for (int element : arr.ForwardRange()) {
    sum += element;
    ++iterations;
  }

  EXPECT_EQ(2u, iterations);
  EXPECT_EQ(7, sum);
}

Minimal test - lines (160, 176)

path: .spaces[1].metrics.cyclomatic.average
old: 12.0
new: 2.0

path: .spaces[1].metrics.cyclomatic.sum
old: 12.0
new: 2.0

path: .spaces[1].metrics.halstead.N2
old: 59.0
new: 33.0

path: .spaces[1].metrics.halstead.time
old: 732.6521010628269
new: 203.11944491821575

path: .spaces[1].metrics.halstead.effort
old: 13187.737819130884
new: 3656.150008527884

path: .spaces[1].metrics.halstead.N1
old: 81.0
new: 45.0

path: .spaces[1].metrics.halstead.estimated_program_length
old: 174.6997636784959
new: 118.76437056043838

path: .spaces[1].metrics.halstead.level
old: 0.05649717514124294
new: 0.1046831955922865

path: .spaces[1].metrics.halstead.n1
old: 15.0
new: 11.0

path: .spaces[1].metrics.halstead.volume
old: 745.0699332842307
new: 382.7374664574645

path: .spaces[1].metrics.halstead.bugs
old: 0.18606254125227265
new: 0.07910939855317138

path: .spaces[1].metrics.halstead.n2
old: 25.0
new: 19.0

path: .spaces[1].metrics.halstead.difficulty
old: 17.7
new: 9.552631578947368

path: .spaces[1].metrics.halstead.purity_ratio
old: 1.2478554548463994
new: 1.5226201353902356

path: .spaces[1].metrics.halstead.vocabulary
old: 40.0
new: 30.0

path: .spaces[1].metrics.halstead.length
old: 140.0
new: 78.0

path: .spaces[1].metrics.nargs.average
old: 0.0
new: 2.0

path: .spaces[1].metrics.nargs.sum
old: 0.0
new: 2.0

path: .spaces[1].metrics.mi.mi_original
old: 79.86820089755984
new: 93.71572752883074

path: .spaces[1].metrics.mi.mi_sei
old: 71.19067123422053
new: 59.70600308594163

path: .spaces[1].metrics.mi.mi_visual_studio
old: 46.70655023249114
new: 54.804519022708035

path: .spaces[1].metrics.loc.cloc
old: 5.0
new: 0.0

path: .spaces[1].metrics.loc.ploc
old: 23.0
new: 14.0

path: .spaces[1].metrics.loc.blank
old: 0.0
new: 3.0

path: .spaces[1].metrics.loc.sloc
old: 28.0
new: 17.0

path: .spaces[1].metrics.loc.lloc
old: 11.0
new: 6.0

path: .spaces[1].metrics.cognitive.sum
old: 21.0
new: 1.0

path: .spaces[1].metrics.cognitive.average
old: 21.0
new: 1.0

Code

TEST(ObserverArray, ForwardIterator_Remove)
{
  static const int expected[] = {3, 4};

  IntArray arr;
  arr.AppendElement(3);
  arr.AppendElement(4);

  size_t count = 0;
  for (auto iter = IntArray::ForwardIterator{arr}; iter.HasMore();) {
    const int next = iter.GetNext();
    iter.Remove();

    ASSERT_EQ(expected[count++], next);
  }
  ASSERT_EQ(2u, count);
}