Skip to content

Instantly share code, notes, and snippets.

@smly
Created July 31, 2010 18:42
Show Gist options
  • Select an option

  • Save smly/502477 to your computer and use it in GitHub Desktop.

Select an option

Save smly/502477 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <gtest/gtest.h>
#include "lp.hpp"
#include "testing/utils.hpp"
namespace gmll {
struct TestFiles {
public:
std::string gmllResult, matlabResult, edges, labels;
};
typedef std::vector<std::pair<float, float> > PredictFunc;
int loadTestFile(PredictFunc& values, const char* filename)
{
std::ifstream ifs(filename);
std::string line;
for (unsigned int i = 0; i < 10; i++) {
std::getline(ifs, line);
const char *s = line.c_str();
unsigned int pos = 0;
unsigned int len = std::strlen(s);
float a, b;
a = atof(s);
while (pos < len && s[pos] != ',') pos++;
b = atof(s + pos + 1);
values.push_back(std::make_pair(a, b));
}
ifs.close(); ifs.clear();
}
int loadResultFile(PredictFunc& values, const char* filename)
{
std::ifstream ifs(filename);
for (unsigned int i = 0; i < 12; i++) {
std::string line;
std::getline(ifs, line);
if (i < 2) continue;
const char *s = line.c_str();
unsigned int pos = 0;
unsigned int len = std::strlen(s);
float a, b;
while (pos < len && s[pos] != ' ') pos++;
a = atof(s + pos + 1);
pos++;
while (pos < len && s[pos] != ' ') pos++;
b = atof(s + pos + 1);
values.push_back(std::make_pair(a, b));
}
ifs.close();
}
class UndirectedEdgesTest : public::testing::Test {
protected:
UndirectedEdgesTest() {
const std::string base = Path::TestSourceDir() + \
"/../testdata/zhu_harmonic_function/";
files_.gmllResult = base + "sample_result";
files_.matlabResult = base + "sample_fu";
files_.edges = base + "sample_edges_undirected.txt";
files_.labels = base + "sample_fl";
}
TestFiles files_;
};
TEST_F(UndirectedEdgesTest, FileCheck) {
ASSERT_EQ(true, File::Exists(files_.matlabResult))
<< "doesn't exists matlabResult: " << files_.matlabResult;
ASSERT_EQ(true, File::Exists(files_.edges))
<< "doesn't exists edges: " << files_.edges;
ASSERT_EQ(true, File::Exists(files_.labels))
<< "doesn't exists labels" << files_.labels;
}
TEST_F(UndirectedEdgesTest, CompareMatlabImpl) {
Setting s; s.digraph = false;
LP lp(s);
lp.loadFl(files_.labels.c_str());
lp.loadW(files_.edges.c_str());
lp.infer();
lp.saveF(files_.gmllResult.c_str());
PredictFunc matlabResultFunc, gmllResultFunc;
loadTestFile(matlabResultFunc, files_.matlabResult.c_str());
loadResultFile(gmllResultFunc, files_.gmllResult.c_str());
for (unsigned int i = 0; i < gmllResultFunc.size(); i++) {
EXPECT_NEAR(matlabResultFunc[i].first, gmllResultFunc[i].first, 1.0e-5);
EXPECT_NEAR(matlabResultFunc[i].second, gmllResultFunc[i].second, 1.0e-5);
}
}
class DirectedEdgesTest : public ::testing::Test {
protected:
DirectedEdgesTest() {
const std::string base = Path::TestSourceDir() + \
"/../testdata/zhu_harmonic_function/";
files_.gmllResult = base + "sample_result";
files_.matlabResult = base + "sample_fu";
files_.edges = base + "sample_edges.txt";
files_.labels = base + "sample_fl";
}
TestFiles files_;
};
TEST_F(DirectedEdgesTest, FileCheck) {
ASSERT_EQ(true, File::Exists(files_.matlabResult))
<< "doesn't exists matlabResult: " << files_.matlabResult;
ASSERT_EQ(true, File::Exists(files_.edges))
<< "doesn't exists edges: " << files_.edges;
ASSERT_EQ(true, File::Exists(files_.labels))
<< "doesn't exists labels" << files_.labels;
}
TEST_F(DirectedEdgesTest, CompareMatlabImpl) {
Setting s; s.digraph = true;
LP lp(s);
lp.loadFl(files_.labels.c_str());
lp.loadW(files_.edges.c_str());
lp.infer();
lp.saveF(files_.gmllResult.c_str());
PredictFunc matlabResultFunc, gmllResultFunc;
loadTestFile(matlabResultFunc, files_.matlabResult.c_str());
loadResultFile(gmllResultFunc, files_.gmllResult.c_str());
for (unsigned int i = 0; i < gmllResultFunc.size(); i++) {
EXPECT_NEAR(matlabResultFunc[i].first, gmllResultFunc[i].first, 1.0e-5);
EXPECT_NEAR(matlabResultFunc[i].second, gmllResultFunc[i].second, 1.0e-5);
}
}
} //namespace gmll
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment