diff --git a/GitHubRepoPublicReleaseApproval.md b/GitHubRepoPublicReleaseApproval.md index 73760ec..996a140 100644 --- a/GitHubRepoPublicReleaseApproval.md +++ b/GitHubRepoPublicReleaseApproval.md @@ -29,4 +29,4 @@ for that branch. The following must login to GitHub and approve that pull reques before the pull request can be merged and this repo made public: * Project Lead: Kozma Jr, William -* Supervising Division Chief or Release Authority: TODO-TEMPLATE +* Supervising Division Chief or Release Authority: Chris Anderson diff --git a/tests/LFMFGTestUtils.cpp b/tests/LFMFGTestUtils.cpp index 891442c..9454921 100644 --- a/tests/LFMFGTestUtils.cpp +++ b/tests/LFMFGTestUtils.cpp @@ -18,28 +18,24 @@ * *****************************************************************************/ std::vector ReadLFMFInputsAndResult(const std::string &filename) { + + std::vector testData; + std::string dataDir = GetDirectory("data"); + std::ifstream file(dataDir + filename); + LFMFInputsAndResult d {}; // struct to store data from a single line of CSV - std::vector testData; - std::string dataDir = GetDirectory("data"); - std::ifstream file(dataDir + filename); - LFMFInputsAndResult d { - }; // struct to store data from a single line of CSV - try { - std::vector> csvRows = readCSV(file); - if (csvRows.size() <= 1) { - return testData; - } - + std::vector> csvRows = readCSV(file); + if (csvRows.size() <= 1) { + return testData; + } typedef std::vector >::size_type row_vec_size_t; typedef std::vector::size_type cell_vec_size_t; for (row_vec_size_t r = 1; r < csvRows.size(); r++) { int c = 0; - if (r % 100 == 0) { - std::cout << " Test instance: " << r << std::endl; - } - for (cell_vec_size_t i = 0; i < csvRows[0].size(); i++) { + if (csvRows[r].size() > 1) { + for (cell_vec_size_t i = 0; i < csvRows[r].size(); i++) { try { if (csvRows[0][i] == "h_tx__meter") { d.h_tx__meter = std::stod(csvRows[r][i]); @@ -82,35 +78,35 @@ std::vector ReadLFMFInputsAndResult(const std::string &file d.expectedReturn = std::stoi(csvRows[r][i]); } if (csvRows[0][i] == "A_btl__db") { - d.expectedResult.A_btl__db = stringToDouble(csvRows[r][i]); + d.expectedResult.A_btl__db + = stringToDouble(csvRows[r][i]); c++; } if (csvRows[0][i] == "E_dBuVm") { - d.expectedResult.E_dBuVm = stringToDouble(csvRows[r][i]); + d.expectedResult.E_dBuVm + = stringToDouble(csvRows[r][i]); c++; } if (csvRows[0][i] == "P_rx__dbm") { - d.expectedResult.P_rx__dbm = stringToDouble(csvRows[r][i]); + d.expectedResult.P_rx__dbm + = stringToDouble(csvRows[r][i]); c++; } if (csvRows[0][i] == "method") { - d.expectedResult.method = static_cast(std::stoi(csvRows[r][i])); + d.expectedResult.method = static_cast( + std::stoi(csvRows[r][i]) + ); c++; } } catch (const char *msg) { // Code to handle the exception - std::cerr << "Error: " << r << ", " << csvRows[r][i] - << std::endl; + std::cerr << "Error: " << r << ", " << csvRows[r][i] << std::endl; } } if (c == 13) { testData.push_back(d); } - - } - } catch (const char *msg) { - // Code to handle the exception - std::cerr << "Error: " << std::endl; + } } return testData; } diff --git a/tests/TestLFMFPolarizationHorizontal.cpp b/tests/TestLFMFPolarizationHorizontal.cpp index 3813ef3..85f0c43 100644 --- a/tests/TestLFMFPolarizationHorizontal.cpp +++ b/tests/TestLFMFPolarizationHorizontal.cpp @@ -35,14 +35,9 @@ class TestLFMFPolarizationHorizontal: public ::testing::Test { TEST_F(TestLFMFPolarizationHorizontal, FlatEarthCurveMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__FLAT_EARTH_CURVE) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, @@ -73,14 +68,9 @@ TEST_F(TestLFMFPolarizationHorizontal, FlatEarthCurveMethodEquivalentToMatLAB) { TEST_F(TestLFMFPolarizationHorizontal, ResidueSeriesMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__RESIDUE_SERIES) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, diff --git a/tests/TestLFMFPolarizationHorizontalMax.cpp b/tests/TestLFMFPolarizationHorizontalMax.cpp index 29e27ed..7bc09be 100644 --- a/tests/TestLFMFPolarizationHorizontalMax.cpp +++ b/tests/TestLFMFPolarizationHorizontalMax.cpp @@ -35,14 +35,9 @@ class TestLFMFPolarizationHorizontalMax: public ::testing::Test { TEST_F(TestLFMFPolarizationHorizontalMax, FlatEarthCurveMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__FLAT_EARTH_CURVE) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, @@ -73,14 +68,9 @@ TEST_F(TestLFMFPolarizationHorizontalMax, FlatEarthCurveMethodEquivalentToMatLAB TEST_F(TestLFMFPolarizationHorizontalMax, ResidueSeriesMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__RESIDUE_SERIES) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, diff --git a/tests/TestLFMFPolarizationVertical.cpp b/tests/TestLFMFPolarizationVertical.cpp index 493e05f..e4bc05b 100644 --- a/tests/TestLFMFPolarizationVertical.cpp +++ b/tests/TestLFMFPolarizationVertical.cpp @@ -35,14 +35,9 @@ class TestLFMFPolarizationVertical: public ::testing::Test { TEST_F(TestLFMFPolarizationVertical, FlatEarthCurveMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__FLAT_EARTH_CURVE) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, @@ -73,14 +68,9 @@ TEST_F(TestLFMFPolarizationVertical, FlatEarthCurveMethodEquivalentToMatLAB) { TEST_F(TestLFMFPolarizationVertical, ResidueSeriesMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__RESIDUE_SERIES) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, diff --git a/tests/TestLFMFPolarizationVerticalMax.cpp b/tests/TestLFMFPolarizationVerticalMax.cpp index 003832a..ab7e993 100644 --- a/tests/TestLFMFPolarizationVerticalMax.cpp +++ b/tests/TestLFMFPolarizationVerticalMax.cpp @@ -35,14 +35,9 @@ class TestLFMFPolarizationVerticalMax: public ::testing::Test { TEST_F(TestLFMFPolarizationVerticalMax, FlatEarthCurveMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__FLAT_EARTH_CURVE) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, @@ -73,14 +68,9 @@ TEST_F(TestLFMFPolarizationVerticalMax, FlatEarthCurveMethodEquivalentToMatLAB) TEST_F(TestLFMFPolarizationVerticalMax, ResidueSeriesMethodEquivalentToMatLAB) { // Ensure test data was loaded EXPECT_NE(static_cast(testData.size()), 0); - int i = 0; for (const auto &data : testData) { if (data.expectedResult.method == METHOD__RESIDUE_SERIES) { - i++; Result result; - if (i % 100 == 0) { - std::cout << " Test instance: " << i << std::endl; - } int rtn = LFMF( data.h_tx__meter, data.h_rx__meter, diff --git a/tests/TestLFMFReturnCode.cpp b/tests/TestLFMFReturnCode.cpp index 8678eeb..174b1a7 100644 --- a/tests/TestLFMFReturnCode.cpp +++ b/tests/TestLFMFReturnCode.cpp @@ -36,26 +36,28 @@ TEST_F(TestLFMFReturnCode, ReturnSuccess) { std::cout << "TestLFMF from '" << fileName << "': " << testData.size() << " Test instances." << std::endl; for (const auto& data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, data.expectedReturn); - EXPECT_NEAR(result.A_btl__db, data.expectedResult.A_btl__db, TOLERANCE); - EXPECT_NEAR(result.E_dBuVm, data.expectedResult.E_dBuVm, TOLERANCE); - EXPECT_NEAR(result.P_rx__dbm, data.expectedResult.P_rx__dbm, TOLERANCE); - EXPECT_EQ(result.method, data.expectedResult.method); + if (data.expectedReturn == SUCCESS) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, data.expectedReturn); + EXPECT_NEAR(result.A_btl__db, data.expectedResult.A_btl__db, TOLERANCE); + EXPECT_NEAR(result.E_dBuVm, data.expectedResult.E_dBuVm, TOLERANCE); + EXPECT_NEAR(result.P_rx__dbm, data.expectedResult.P_rx__dbm, TOLERANCE); + EXPECT_EQ(result.method, data.expectedResult.method); + } } } @@ -66,37 +68,24 @@ TEST_F(TestLFMFReturnCode, ReturnSuccess) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidTXTerminalHeight) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - -0.1, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__TX_TERMINAL_HEIGHT); - - rtn = LFMF( - 50.1, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__TX_TERMINAL_HEIGHT); + if (data.expectedReturn == ERROR__TX_TERMINAL_HEIGHT) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__TX_TERMINAL_HEIGHT); + } } } @@ -107,37 +96,24 @@ TEST_F(TestLFMFReturnCode, InvalidTXTerminalHeight) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidRXTerminalHeight) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - -0.1, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__RX_TERMINAL_HEIGHT); - - rtn = LFMF( - data.h_tx__meter, - 50.1, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__RX_TERMINAL_HEIGHT); + if (data.expectedReturn == ERROR__RX_TERMINAL_HEIGHT) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__RX_TERMINAL_HEIGHT); + } } } @@ -148,37 +124,24 @@ TEST_F(TestLFMFReturnCode, InvalidRXTerminalHeight) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidFrequency) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - 0.009, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__FREQUENCY); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - 30.1, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__FREQUENCY); + if (data.expectedReturn == ERROR__FREQUENCY) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__FREQUENCY); + } } } @@ -189,37 +152,24 @@ TEST_F(TestLFMFReturnCode, InvalidRXTerminalHeight) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidTransmitPower) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - 0, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__TX_POWER); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - -0.1, - data.N_s, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__TX_POWER); + if (data.expectedReturn == ERROR__TX_POWER) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__TX_POWER); + } } } @@ -230,37 +180,24 @@ TEST_F(TestLFMFReturnCode, InvalidTransmitPower) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidSurfaceRefractivity) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - 249.9, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__SURFACE_REFRACTIVITY); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - 400.1, - data.d__km, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__SURFACE_REFRACTIVITY); + if (data.expectedReturn == ERROR__SURFACE_REFRACTIVITY) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__SURFACE_REFRACTIVITY); + } } } @@ -271,37 +208,24 @@ TEST_F(TestLFMFReturnCode, InvalidSurfaceRefractivity) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidPathDistance) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - 0.0009, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__PATH_DISTANCE); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - 10000.1, - data.epsilon, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__PATH_DISTANCE); + if (data.expectedReturn == ERROR__PATH_DISTANCE) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__PATH_DISTANCE); + } } } @@ -312,37 +236,24 @@ TEST_F(TestLFMFReturnCode, InvalidPathDistance) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidEpsilon) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - 0.99, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__EPSILON); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - -0.1, - data.sigma, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__EPSILON); + if (data.expectedReturn == ERROR__EPSILON) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__EPSILON); + } } } @@ -353,37 +264,24 @@ TEST_F(TestLFMFReturnCode, InvalidEpsilon) { *****************************************************************************/ TEST_F(TestLFMFReturnCode, InvalidSigma) { for (const auto &data : testData) { - Result result; - - int rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - 0, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__SIGMA); - - rtn = LFMF( - data.h_tx__meter, - data.h_rx__meter, - data.f__mhz, - data.P_tx__watt, - data.N_s, - data.d__km, - data.epsilon, - -0.1, - data.pol, - &result - ); - - EXPECT_EQ(rtn, ERROR__SIGMA); + if (data.expectedReturn == ERROR__SIGMA) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__SIGMA); + } } } @@ -425,5 +323,23 @@ TEST_F(TestLFMFReturnCode, InvalidPolarization) { ); EXPECT_EQ(rtn, ERROR__POLARIZATION); + if (data.expectedReturn == ERROR__POLARIZATION) { + Result result; + + int rtn = LFMF( + data.h_tx__meter, + data.h_rx__meter, + data.f__mhz, + data.P_tx__watt, + data.N_s, + data.d__km, + data.epsilon, + data.sigma, + data.pol, + &result + ); + + EXPECT_EQ(rtn, ERROR__POLARIZATION); + } } } \ No newline at end of file diff --git a/tests/data/LFMF_Examples.csv b/tests/data/LFMF_Examples.csv index 0d036f0..4918e90 100644 --- a/tests/data/LFMF_Examples.csv +++ b/tests/data/LFMF_Examples.csv @@ -4,3 +4,93 @@ h_tx__meter,h_rx__meter,f__mhz,P_tx__watt,N_s,d__km,epsilon,sigma,pol,rtn,A_btl_ 5.5,1.5,10,500,315,15,15,0.005,0,0,151.3,7.6,-84.8,0 1,1,0.45,1000,315,3000,15,0.005,1,0,264.3,-129.3,-194.8,1 10,10,30,10000,315,5000,15,0.005,0,0,1574.9,-1393.3,-1495.3,1 +-0.1,0,0.01,1000,301,1000,15,0.005,0,32,184.5,-82.5,-114.9,1 +-0.1,0,1,5000,301,5000,15,0.005,1,32,536.5,-387.5,-459.9,1 +-0.1,1.5,10,500,315,15,15,0.005,0,32,151.3,7.6,-84.8,0 +-0.1,1,0.45,1000,315,3000,15,0.005,1,32,264.3,-129.3,-194.8,1 +-0.1,10,30,10000,315,5000,15,0.005,0,32,1574.9,-1393.3,-1495.3,1 +50.1,0,0.01,1000,301,1000,15,0.005,0,32,184.5,-82.5,-114.9,1 +50.1,0,1,5000,301,5000,15,0.005,1,32,536.5,-387.5,-459.9,1 +50.1,1.5,10,500,315,15,15,0.005,0,32,151.3,7.6,-84.8,0 +50.1,1,0.45,1000,315,3000,15,0.005,1,32,264.3,-129.3,-194.8,1 +50.1,10,30,10000,315,5000,15,0.005,0,32,1574.9,-1393.3,-1495.3,1 +0,-0.1,0.01,1000,301,1000,15,0.005,0,33,184.5,-82.5,-114.9,1 +0,-0.1,1,5000,301,5000,15,0.005,1,33,536.5,-387.5,-459.9,1 +5.5,-0.1,10,500,315,15,15,0.005,0,33,151.3,7.6,-84.8,0 +1,-0.1,0.45,1000,315,3000,15,0.005,1,33,264.3,-129.3,-194.8,1 +10,-0.1,30,10000,315,5000,15,0.005,0,33,1574.9,-1393.3,-1495.3,1 +0,50.1,0.01,1000,301,1000,15,0.005,0,33,184.5,-82.5,-114.9,1 +0,50.1,1,5000,301,5000,15,0.005,1,33,536.5,-387.5,-459.9,1 +5.5,50.1,10,500,315,15,15,0.005,0,33,151.3,7.6,-84.8,0 +1,50.1,0.45,1000,315,3000,15,0.005,1,33,264.3,-129.3,-194.8,1 +10,50.1,30,10000,315,5000,15,0.005,0,33,1574.9,-1393.3,-1495.3,1 +0,0,0.009,1000,301,1000,15,0.005,0,34,184.5,-82.5,-114.9,1 +0,0,0.009,5000,301,5000,15,0.005,1,34,536.5,-387.5,-459.9,1 +5.5,1.5,0.009,500,315,15,15,0.005,0,34,151.3,7.6,-84.8,0 +1,1,0.009,1000,315,3000,15,0.005,1,34,264.3,-129.3,-194.8,1 +10,10,0.009,10000,315,5000,15,0.005,0,34,1574.9,-1393.3,-1495.3,1 +0,0,30.1,1000,301,1000,15,0.005,0,34,184.5,-82.5,-114.9,1 +0,0,30.1,5000,301,5000,15,0.005,1,34,536.5,-387.5,-459.9,1 +5.5,1.5,30.1,500,315,15,15,0.005,0,34,151.3,7.6,-84.8,0 +1,1,30.1,1000,315,3000,15,0.005,1,34,264.3,-129.3,-194.8,1 +10,10,30.1,10000,315,5000,15,0.005,0,34,1574.9,-1393.3,-1495.3,1 +0,0,0.01,0,301,1000,15,0.005,0,35,184.5,-82.5,-114.9,1 +0,0,1,0,301,5000,15,0.005,1,35,536.5,-387.5,-459.9,1 +5.5,1.5,10,0,315,15,15,0.005,0,35,151.3,7.6,-84.8,0 +1,1,0.45,0,315,3000,15,0.005,1,35,264.3,-129.3,-194.8,1 +10,10,30,0,315,5000,15,0.005,0,35,1574.9,-1393.3,-1495.3,1 +0,0,0.01,-0.1,301,1000,15,0.005,0,35,184.5,-82.5,-114.9,1 +0,0,1,-0.1,301,5000,15,0.005,1,35,536.5,-387.5,-459.9,1 +5.5,1.5,10,-0.1,315,15,15,0.005,0,35,151.3,7.6,-84.8,0 +1,1,0.45,-0.1,315,3000,15,0.005,1,35,264.3,-129.3,-194.8,1 +10,10,30,-0.1,315,5000,15,0.005,0,35,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,249.9,1000,15,0.005,0,36,184.5,-82.5,-114.9,1 +0,0,1,5000,249.9,5000,15,0.005,1,36,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,249.9,15,15,0.005,0,36,151.3,7.6,-84.8,0 +1,1,0.45,1000,249.9,3000,15,0.005,1,36,264.3,-129.3,-194.8,1 +10,10,30,10000,249.9,5000,15,0.005,0,36,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,400.1,1000,15,0.005,0,36,184.5,-82.5,-114.9,1 +0,0,1,5000,400.1,5000,15,0.005,1,36,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,400.1,15,15,0.005,0,36,151.3,7.6,-84.8,0 +1,1,0.45,1000,400.1,3000,15,0.005,1,36,264.3,-129.3,-194.8,1 +10,10,30,10000,400.1,5000,15,0.005,0,36,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,0.0009,15,0.005,0,37,184.5,-82.5,-114.9,1 +0,0,1,5000,301,0.0009,15,0.005,1,37,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,0.0009,15,0.005,0,37,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,0.0009,15,0.005,1,37,264.3,-129.3,-194.8,1 +10,10,30,10000,315,0.0009,15,0.005,0,37,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,10000.1,15,0.005,0,37,184.5,-82.5,-114.9,1 +0,0,1,5000,301,10000.1,15,0.005,1,37,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,10000.1,15,0.005,0,37,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,10000.1,15,0.005,1,37,264.3,-129.3,-194.8,1 +10,10,30,10000,315,10000.1,15,0.005,0,37,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,0.99,0.005,0,38,184.5,-82.5,-114.9,1 +0,0,1,5000,301,5000,0.99,0.005,1,38,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,0.99,0.005,0,38,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,0.99,0.005,1,38,264.3,-129.3,-194.8,1 +10,10,30,10000,315,5000,0.99,0.005,0,38,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,-0.1,0.005,0,38,184.5,-82.5,-114.9,1 +0,0,1,5000,301,5000,-0.1,0.005,1,38,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,-0.1,0.005,0,38,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,-0.1,0.005,1,38,264.3,-129.3,-194.8,1 +10,10,30,10000,315,5000,-0.1,0.005,0,38,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,15,0,0,39,184.5,-82.5,-114.9,1 +0,0,1,5000,301,5000,15,0,1,39,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,15,0,0,39,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,15,0,1,39,264.3,-129.3,-194.8,1 +10,10,30,10000,315,5000,15,0,0,39,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,15,-0.1,0,39,184.5,-82.5,-114.9,1 +0,0,1,5000,301,5000,15,-0.1,1,39,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,15,-0.1,0,39,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,15,-0.1,1,39,264.3,-129.3,-194.8,1 +10,10,30,10000,315,5000,15,-0.1,0,39,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,15,0.005,-1,40,184.5,-82.5,-114.9,1 +0,0,1,5000,301,5000,15,0.005,-1,40,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,15,0.005,-1,40,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,15,0.005,-1,40,264.3,-129.3,-194.8,1 +10,10,30,10000,315,5000,15,0.005,-1,40,1574.9,-1393.3,-1495.3,1 +0,0,0.01,1000,301,1000,15,0.005,3,40,184.5,-82.5,314.9,1 +0,0,1,5000,301,5000,15,0.005,3,40,536.5,-387.5,-459.9,1 +5.5,1.5,10,500,315,15,15,0.005,3,40,151.3,7.6,-84.8,0 +1,1,0.45,1000,315,3000,15,0.005,3,40,264.3,329.3,394.8,1 +10,10,30,10000,315,5000,15,0.005,3,40,1574.9,3393.3,3495.3,1 \ No newline at end of file