Skip to content
This repository has been archived by the owner on Sep 1, 2023. It is now read-only.

Commit

Permalink
Add bin sidelength unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mrcslws committed Jan 22, 2019
1 parent 29a52cc commit 369a390
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/nupic/experimental/GridUniqueness.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1842,12 +1842,14 @@ nupic::experimental::grid_uniqueness::computeBinSidelength(
}
}

// The radius needs to be twice as precise to get the sidelength
// sufficiently precise.
// The radius needs to be twice as precise to get the sidelength sufficiently
// precise.
const double resultPrecision2 = resultPrecision / 2;

double dec = (radius - tested) / 2;
while (dec > resultPrecision2)

// The possible error is equal to dec*2.
while (dec*2 > resultPrecision2)
{
const double testRadius = radius - dec;

Expand Down
74 changes: 74 additions & 0 deletions src/test/unit/experimental/GridUniquenessTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -689,4 +689,78 @@ namespace {
0.2, 0.5).first);
}
}

TEST(GridUniquenessTest, binSidelengthBasicTest)
{
const vector<double> scales = {1, 2};
vector<vector<vector<double>>> domainToPlaneByModule;
for (double scale : scales)
{
domainToPlaneByModule.push_back({
{1/scale, 0},
{0, 1/scale},
});
}

const double phaseResolution = 0.2;
const double resultPrecision = 0.001;

const double result =
computeBinSidelength(domainToPlaneByModule, phaseResolution,
resultPrecision);

const double expected = 2*(scales[0]*phaseResolution/2);
ASSERT_GE(result, expected);
ASSERT_LE(result, expected + resultPrecision);
}

TEST(GridUniquenessTest, binSidelengthRank1Test)
{
// Each firing field is a band. The first module creates
// horizontal stripes, the second creates vertical stripes. The
// intersection of two bands is a phaseResolution *
// phaseResolution square.
const vector<vector<vector<double>>> domainToPlaneByModule = {
{{0, 1},
{0, 0}},
{{1, 0},
{0, 0}}
};

const double phaseResolution = 0.2;
const double resultPrecision = 0.001;

const double result =
computeBinSidelength(domainToPlaneByModule, phaseResolution,
resultPrecision);

const double expected = phaseResolution;

ASSERT_GE(result, expected);
ASSERT_LE(result, expected + resultPrecision);
}

TEST(GridUniquenessTest, binSidelength1DTest)
{
const vector<double> scales = {1, 2};
vector<vector<vector<double>>> domainToPlaneByModule;
for (double scale : scales)
{
domainToPlaneByModule.push_back({
{1/scale},
{0},
});
}

const double phaseResolution = 0.2;
const double resultPrecision = 0.001;

const double result =
computeBinSidelength(domainToPlaneByModule, phaseResolution,
resultPrecision);

const double expected = 2*(scales[0]*phaseResolution/2);
ASSERT_GE(result, expected);
ASSERT_LE(result, expected + resultPrecision);
}
}

0 comments on commit 369a390

Please sign in to comment.