#include "gtest/gtest.h" #include #include "radixio/arldatastream.hh" using namespace radix; TEST(RadixIO, ReadArlElements) { double tolerance = 0.001; std::string testFile = "/home/ohp/data/met/RP195111.gbl"; ARLDataStream testStream(testFile); // Read the initial index header ARLIndexHeader testTopIndexHeader; bool success = testStream.read_index_header(testTopIndexHeader); ASSERT_TRUE(success); // Test the content EXPECT_EQ(51, testTopIndexHeader.year); EXPECT_EQ(11, testTopIndexHeader.month); EXPECT_EQ(1, testTopIndexHeader.day); EXPECT_EQ(0, testTopIndexHeader.hour); EXPECT_STREQ("INDX", testTopIndexHeader.kvar.c_str()); ARLRecordHeader testRecordHeader; success = testStream.read_record_header(testTopIndexHeader, testRecordHeader); ASSERT_TRUE(success); // Test the content EXPECT_EQ(144, testRecordHeader.nx); EXPECT_EQ(73, testRecordHeader.ny); EXPECT_EQ(18, testRecordHeader.nz); // Read the data starting from the next index header ARLIndexHeader testIndexHeader; success = testStream.read_next_index_header(testIndexHeader); ASSERT_TRUE(success); // Test the content EXPECT_EQ(51, testIndexHeader.year); EXPECT_EQ(11, testIndexHeader.month); EXPECT_EQ(1, testIndexHeader.day); EXPECT_EQ(0, testIndexHeader.hour); EXPECT_STREQ("PRSS", testIndexHeader.kvar.c_str()); // Read data std::vector> testRecord; success = testStream.read_record(testIndexHeader, testRecordHeader, testRecord); // Test content ASSERT_TRUE(success); ASSERT_EQ(testRecordHeader.nx, testRecord.size()); ASSERT_EQ(testRecordHeader.ny, testRecord[0].size()); EXPECT_NEAR(665.9, testRecord[0][0], 665.9 * tolerance); EXPECT_NEAR(665.9, testRecord[1][0], 665.9 * tolerance); EXPECT_NEAR(677.9, testRecord[0][1], 677.9 * tolerance); EXPECT_NEAR(677.9, testRecord[1][1], 677.9 * tolerance); EXPECT_NEAR(1013.9, testRecord[142][71], 1013.9 * tolerance); EXPECT_NEAR(1011.9, testRecord[143][71], 1011.9 * tolerance); EXPECT_NEAR(1015.9, testRecord[142][72], 1015.9 * tolerance); EXPECT_NEAR(1015.9, testRecord[143][72], 1015.9 * tolerance); // Try another one success = testStream.read_next_index_header(testIndexHeader); ASSERT_TRUE(success); // Test the content EXPECT_EQ(51, testIndexHeader.year); EXPECT_EQ(11, testIndexHeader.month); EXPECT_EQ(1, testIndexHeader.day); EXPECT_EQ(0, testIndexHeader.hour); EXPECT_STREQ("T02M", testIndexHeader.kvar.c_str()); // Read data success = testStream.read_record(testIndexHeader, testRecordHeader, testRecord); // Test content ASSERT_TRUE(success); ASSERT_EQ(testRecordHeader.nx, testRecord.size()); ASSERT_EQ(testRecordHeader.ny, testRecord[0].size()); EXPECT_NEAR(233.4, testRecord[0][0], 233.4 * tolerance); EXPECT_NEAR(233.4, testRecord[1][0], 233.4 * tolerance); EXPECT_NEAR(227.1, testRecord[0][1], 227.1 * tolerance); EXPECT_NEAR(227.1, testRecord[1][1], 227.1 * tolerance); EXPECT_NEAR(236.0, testRecord[142][71], 236.0 * tolerance); EXPECT_NEAR(236.1, testRecord[143][71], 236.1 * tolerance); EXPECT_NEAR(240.6, testRecord[142][72], 240.6 * tolerance); EXPECT_NEAR(240.6, testRecord[143][72], 240.6 * tolerance); } TEST(RadixIO, WriteArlElements) { double tolerance = 0.001; std::string testFile = "/home/ohp/data/met/RP195111.gbl"; ARLDataStream testStream(testFile); // Read the initial index header ARLIndexHeader testTopIndexHeader; bool success = testStream.read_index_header(testTopIndexHeader); ASSERT_TRUE(success); ARLRecordHeader testRecordHeader; success = testStream.read_record_header(testTopIndexHeader, testRecordHeader); ASSERT_TRUE(success); // Read the data starting from the next index header ARLIndexHeader testIndexHeader; success = testStream.read_next_index_header(testIndexHeader); ASSERT_TRUE(success); // Read data std::vector> testRecord; success = testStream.read_record(testIndexHeader, testRecordHeader, testRecord); ASSERT_TRUE(success); // Write this data back out to a file } // TEST(RadixIO, ReadArlWholeFile) //{ //}