Newer
Older
#ifndef LOADTBLTEST_H_
#define LOADTBLTEST_H_
#include "cxxtest/TestSuite.h"
#include "MantidAPI/AnalysisDataService.h"
#include "MantidAPI/AlgorithmManager.h"
#include "MantidAPI/TableRow.h"
#include <Poco/File.h>
#include <fstream>
using namespace Mantid::API;
using namespace Mantid::DataHandling;
using namespace Mantid::Kernel;
using namespace Mantid::DataObjects;
class LoadTBLTest : public CxxTest::TestSuite {
static LoadTBLTest *createSuite() { return new LoadTBLTest(); }
static void destroySuite(LoadTBLTest *suite) { delete suite; }
LoadTBLTest()
: m_filename("LoadTBLTest.tbl"), m_wsName("LoadTBLTestWS"),
void testFileNoQuotes() {
// create a file with each line containing different but valid data format
std::ofstream file(m_filename.c_str());
file << "13460,0.7,13463,0.01,0.06,,,,,,,,,,,0.04,2" << std::endl;
file << "13469,0.7,13463,0.01,0.06,13470,2.3,13463,0.035,0.3,,,,,,0.04,2"
<< std::endl;
file << "13460,0.7,13463,0.01,0.06,13462,2.3,13463,0.035,0.3,13470,2.3,"
"13463,0.035,0.3,0.04,2" << std::endl;
file << "13460,0.7,13463,0.01,0.06,,,,,,13470,2.3,13463,0.035,0.3,0.04,2"
<< std::endl;
file << ",,,,,13470,2.3,13463,0.035,0.3,,,,,,0.04,2" << std::endl;
file << ",,,,,,,,,,13462,2.3,13463,0.035,0.3,0.04,2" << std::endl;
file.close();
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS_NOTHING(alg->execute());
TS_ASSERT(alg->isExecuted());
TS_ASSERT_EQUALS(AnalysisDataService::Instance().doesExist(m_wsName), true);
Workspace_sptr output;
TS_ASSERT_THROWS_NOTHING(
output = AnalysisDataService::Instance().retrieve(m_wsName));
TableWorkspace_sptr outputWS =
boost::dynamic_pointer_cast<TableWorkspace>(output);
TS_ASSERT_EQUALS(outputWS->columnCount(), 9);
TS_ASSERT_EQUALS(outputWS->rowCount(), 10);
// test the first three rows, equivalent to the first two rows of the file.
TableRow row = outputWS->getRow(0);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13460");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 0.7,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)), 0.01,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.06,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 1);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13469");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 0.7,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)), 0.01,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.06,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 2);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13470");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 2.3,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),
0.035, 0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.3,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 2);
void testQuotedFile() {
// create a file with each line containing different but valid data format
std::ofstream file(m_filename.c_str());
file << "13460,0.7,\"13463,13464\",0.01,0.06,,,,,,,,,,,0.04,2" << std::endl;
file << "13469,0.7,\"13463,13464\",0.01,0.06,13470,2.3,\"13463,13464\",0."
"035,0.3,,,,,,0.04,2" << std::endl;
file << "13460,0.7,\"13463,13464\",0.01,0.06,13462,2.3,\"13463,13464\",0."
"035,0.3,13470,2.3,\"13463,13464\",0.035,0.3,0.04,2" << std::endl;
file << "13460,0.7,\"13463,13464\",0.01,0.06,,,,,,13470,2.3,\"13463,"
"13464\",0.035,0.3,0.04,2" << std::endl;
file << ",,,,,13470,2.3,\"13463,13464\",0.035,0.3,,,,,,0.04,2" << std::endl;
file << ",,,,,,,,,,13462,2.3,\"13463,13464\",0.035,0.3,0.04,2" << std::endl;
file.close();
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS_NOTHING(alg->execute());
TS_ASSERT(alg->isExecuted());
TS_ASSERT_EQUALS(AnalysisDataService::Instance().doesExist(m_wsName), true);
Workspace_sptr output;
TS_ASSERT_THROWS_NOTHING(
output = AnalysisDataService::Instance().retrieve(m_wsName));
TableWorkspace_sptr outputWS =
boost::dynamic_pointer_cast<TableWorkspace>(output);
TS_ASSERT_EQUALS(outputWS->columnCount(), 9);
TS_ASSERT_EQUALS(outputWS->rowCount(), 10);
// test the first three rows, equivalent to the first two rows of the file.
TableRow row = outputWS->getRow(0);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13460");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 0.7,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463,13464");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)), 0.01,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.06,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 1);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13469");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 0.7,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463,13464");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)), 0.01,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.06,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 2);
TS_ASSERT_EQUALS(row.cell<std::string>(0), "13470");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(1)), 2.3,
0.01);
TS_ASSERT_EQUALS(row.cell<std::string>(2), "13463,13464");
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),
0.035, 0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)), 0.3,
0.001);
TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)), 0.04,
0.001);
TS_ASSERT_DELTA(row.cell<double>(6), 2, 0.01);
TS_ASSERT_EQUALS(row.cell<int>(7), 2);
void testFewColumns() {
// create a file with each line containing too few columns
std::ofstream file(m_filename.c_str());
file << "13460,0.7,\"13463,13464\",0.01,0.06,,,,,,,0.04,2" << std::endl;
file << "13469,0.7,\"13463,13464\",0.01,0.06,13470,2.3,\"13463,13464\",0."
"035,0.3,,0.04,2" << std::endl;
file << "13460,0.7,\"13463,13464\",,\"13463,13464\",,13470,2.3,\"13463,"
"13464\",0.035,0.04,2" << std::endl;
file << "13460,0.7,\"13463,13464\",0.01,0.06,,13470,2.3,\"13463,13464\",0."
"035,0.3,0.04,2" << std::endl;
file << "13470,2.3,\"13463,13464\",0.035,0.3,,0.04,2" << std::endl;
file << ",,,,13462,2.3,\"13463,13464\",0.035,0.3,0.04,2" << std::endl;
file.close();
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS_ANYTHING(alg->execute());
TS_ASSERT_THROWS_NOTHING(Poco::File(m_abspath).remove());
void testManyColumns() {
// create a file with each line containing too many columns
std::ofstream file(m_filename.c_str());
file << "13460,0.7,13463,0.01,0.06,,,,,,,,,,,0.04,2,,,,0.04,2" << std::endl;
file << "13469,0.7,13463,0.01,0.06,13470,2.3,13463,0.035,0.3,,,,,,0.04,2,,,"
",0.04,2" << std::endl;
file << "13460,0.7,13463,0.01,0.06,13462,2.3,13463,0.035,0.3,13470,2.3,"
"13463,0.035,0.3,0.04,2,,,,0.04,2" << std::endl;
file << "13460,0.7,13463,0.01,0.06,,,,,,13470,2.3,13463,0.035,0.3,0.04,2,,,"
",0.04,2" << std::endl;
file << ",,,,,13470,2.3,13463,0.035,0.3,,,,,,0.04,2,,,,0.04,2" << std::endl;
file << ",,,,,,,,,13462,2.3,13463,0.035,0.3,0.04,2,,,,0.04,2" << std::endl;
file.close();
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS_ANYTHING(alg->execute());
TS_ASSERT_THROWS_NOTHING(Poco::File(m_abspath).remove());
}
void testManyColumnsTwo() {
// create a file with each line containing too many columns
std::ofstream file(m_filename.c_str());
file << "13460,0.7,\"13463,0.01\",0.06,,,,,,,,,,,0.04,2,,,,0.04,2"
<< std::endl;
file << "13469,0.7,13463,\"0.01,0.06\",13470,2.3,13463,0.06,\"13470,0.06,"
"13470\",2.3,13463,0.035,0.3,,,,,,,,,0.04,2,,,,0.04,2" << std::endl;
file << "13460,0.7,13463,0.01,0.06,13462,2.3,13463,0.035,0.3,13470,2.3,"
"13463,0.035,0.3,0.04,2,,,,0.04,2" << std::endl;
file << "13460,0.7,\"13463,0.01\",0.06,,,,,,,,,,13470,2.3,\"13463,0.035\","
"0.3,0.04,2,,,,0.04,2" << std::endl;
file << ",,,,,13470,2.3,\"13463,0.035\",0.3,,,,,,,,,0.04,2,,,,0.04,2"
<< std::endl;
file << ",,,,,,,,,,,,13462,2.3,\"13463,0.035\",0.3,0.04,2,,,,0.04,2"
<< std::endl;
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS_ANYTHING(alg->execute());
TS_ASSERT_THROWS_NOTHING(Poco::File(m_abspath).remove());
std::ofstream file(m_filename.c_str());
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS(alg->execute(), std::runtime_error);
void testNoDataFile() {
// create a file with content, and the right amount of delimiters, but no
// valid data
std::ofstream file(m_filename.c_str());
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file << ",,,,,,,,,,,,,,,," << std::endl;
file.close();
Mantid::API::IAlgorithm_sptr alg =
Mantid::API::AlgorithmManager::Instance().create("LoadTBL");
alg->setRethrows(true);
TS_ASSERT(alg->isInitialized());
TS_ASSERT_THROWS_NOTHING(alg->setPropertyValue("Filename", m_filename));
m_abspath = alg->getPropertyValue("Filename"); // Get absolute path
TS_ASSERT_THROWS_NOTHING(
alg->setPropertyValue("OutputWorkspace", m_wsName));
TS_ASSERT_THROWS(alg->execute(), std::runtime_error);
cleanupafterwards();
}
private:
const std::string m_filename;
const std::string m_wsName;
std::string m_abspath;
TS_ASSERT_THROWS_NOTHING(AnalysisDataService::Instance().remove(m_wsName));
TS_ASSERT_THROWS_NOTHING(Poco::File(m_abspath).remove());