Merge branch 'master' into develop
# Conflicts: # xpcPlugin/XPlaneConnect/mac.xpl # xpcPlugin/xpcPlugin.xcodeproj/project.pbxproj
This commit is contained in:
188
TestScripts/C Tests/CtrlTests.h
Normal file
188
TestScripts/C Tests/CtrlTests.h
Normal file
@@ -0,0 +1,188 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef CTRLTESTS_H
|
||||
#define CTRLTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int doCTRLTest(char* drefs[7], float values[], int size, int ac, float expected[7])
|
||||
{
|
||||
float* data[7];
|
||||
int sizes[7];
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
data[i] = (float*)malloc(sizeof(float) * 16);
|
||||
sizes[i] = 16;
|
||||
}
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = sendCTRL(sock, values, size, ac);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getDREFs(sock, drefs, data, 7, sizes);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test values
|
||||
float actual[7];
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
actual[i] = data[i][0];
|
||||
}
|
||||
return compareArray(expected, actual, 7);
|
||||
}
|
||||
|
||||
int doGETCTest(float values[7], int ac, float expected[7])
|
||||
{
|
||||
// Execute Test
|
||||
float actual[7];
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = sendCTRL(sock, values, 7, ac);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getCTRL(sock, actual, ac);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test values
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
if (fabs(expected[i] - actual[i]) > 1e-4)
|
||||
{
|
||||
return -10 - i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int basicCTRLTest(char** drefs, int ac)
|
||||
{
|
||||
// Set control surfaces to known state.
|
||||
float CTRL[6] = { 0.0F, 0.0F, 0.0F, 0.8F, 1.0F, 0.5F };
|
||||
float expected[7] = { 0.0F, 0.0F, 0.0F, NAN, NAN, NAN, NAN };
|
||||
int result = doCTRLTest(drefs, CTRL, 3, ac, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -10000 + result;
|
||||
}
|
||||
|
||||
// Test control surfaces and set other values to known state.
|
||||
expected[0] = CTRL[0] = 0.2F;
|
||||
expected[1] = CTRL[1] = 0.1F;
|
||||
expected[2] = CTRL[2] = 0.1F;
|
||||
expected[3] = 0.8F;
|
||||
expected[4] = 1.0F;
|
||||
expected[5] = 0.5F;
|
||||
result = doCTRLTest(drefs, CTRL, 6, ac, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -20000 + result;
|
||||
}
|
||||
|
||||
// Test other values and verify control surfaces unchanged.
|
||||
CTRL[0] = -998;
|
||||
CTRL[1] = -998;
|
||||
CTRL[2] = -998;
|
||||
expected[3] = CTRL[3] = 0.9F;
|
||||
expected[4] = CTRL[4] = 0.0F;
|
||||
expected[5] = CTRL[5] = 0.75F;
|
||||
result = doCTRLTest(drefs, CTRL, 6, ac, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -30000 + result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testCTRL_Player()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit2/controls/yoke_pitch_ratio",
|
||||
"sim/cockpit2/controls/yoke_roll_ratio",
|
||||
"sim/cockpit2/controls/yoke_heading_ratio",
|
||||
"sim/flightmodel/engine/ENGN_thro",
|
||||
"sim/cockpit/switches/gear_handle_status",
|
||||
"sim/flightmodel/controls/flaprqst",
|
||||
"sim/flightmodel/controls/sbrkrqst"
|
||||
};
|
||||
return basicCTRLTest(drefs, 0);
|
||||
}
|
||||
|
||||
int testCTRL_NonPlayer()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/multiplayer/position/plane1_yolk_pitch",
|
||||
"sim/multiplayer/position/plane1_yolk_roll",
|
||||
"sim/multiplayer/position/plane1_yolk_yaw",
|
||||
"sim/multiplayer/position/plane1_throttle",
|
||||
"sim/multiplayer/position/plane1_gear_deploy",
|
||||
"sim/multiplayer/position/plane1_flap_ratio",
|
||||
"sim/multiplayer/position/plane1_sbrkrqst"
|
||||
};
|
||||
return basicCTRLTest(drefs, 1);
|
||||
}
|
||||
|
||||
int testCTRL_Speedbrakes()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit2/controls/yoke_pitch_ratio",
|
||||
"sim/cockpit2/controls/yoke_roll_ratio",
|
||||
"sim/cockpit2/controls/yoke_heading_ratio",
|
||||
"sim/flightmodel/engine/ENGN_thro",
|
||||
"sim/cockpit/switches/gear_handle_status",
|
||||
"sim/flightmodel/controls/flaprqst",
|
||||
"sim/flightmodel/controls/sbrkrqst"
|
||||
};
|
||||
|
||||
// Arm
|
||||
float CTRL[7] = { -998, -998, -998, -998, -998, -998, -0.5F };
|
||||
float expected[7] = { NAN, NAN, NAN, NAN, NAN, NAN, -0.5F };
|
||||
int result = doCTRLTest(drefs, CTRL, 7, 0, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -10000 + result;
|
||||
}
|
||||
|
||||
// Set to full
|
||||
expected[6] = CTRL[6] = 1.5F;
|
||||
result = doCTRLTest(drefs, CTRL, 7, 0, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -20000 + result;
|
||||
}
|
||||
|
||||
// Retract
|
||||
expected[6] = CTRL[6] = 0.0F;
|
||||
result = doCTRLTest(drefs, CTRL, 7, 0, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -30000 + result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testGETC()
|
||||
{
|
||||
float CTRL[7] = { 0.0F, 0.0F, 0.0F, 0.8F, 1.0F, 0.5F, -1.5F };
|
||||
return doGETCTest(CTRL, 0, CTRL);
|
||||
}
|
||||
|
||||
int testGETC_NonPlayer()
|
||||
{
|
||||
float CTRL[7] = { 0.0F, 0.0F, 0.0F, 0.8F, 1.0F, 0.5F, -1.5F };
|
||||
return doGETCTest(CTRL, 2, CTRL);
|
||||
}
|
||||
#endif
|
||||
62
TestScripts/C Tests/DataTests.h
Normal file
62
TestScripts/C Tests/DataTests.h
Normal file
@@ -0,0 +1,62 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef DATATESTS_H
|
||||
#define DATATESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int testDATA()
|
||||
{
|
||||
// Initialize
|
||||
int i, j; // Iterator
|
||||
char* drefs[100] =
|
||||
{
|
||||
"sim/aircraft/parts/acf_gear_deploy"
|
||||
};
|
||||
float* data[100]; // array for result of getDREFs
|
||||
int sizes[100];
|
||||
float DATA[4][9]; // Array for sendDATA
|
||||
XPCSocket sock = openUDP(IP);
|
||||
|
||||
// Setup
|
||||
for (int i = 0; i < 100; ++i)
|
||||
{
|
||||
data[i] = (float*)malloc(40 * sizeof(float));
|
||||
sizes[i] = 40;
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
for (j = 0; j < 9; j++)
|
||||
{
|
||||
data[i][j] = -998;
|
||||
}
|
||||
}
|
||||
DATA[0][0] = 14; // Gear
|
||||
DATA[0][1] = 1;
|
||||
DATA[0][2] = 0;
|
||||
|
||||
// Execution
|
||||
sendDATA(sock, DATA, 1);
|
||||
int result = getDREFs(sock, drefs, data, 1, sizes);
|
||||
|
||||
// Close
|
||||
closeUDP(sock);
|
||||
|
||||
// Tests
|
||||
if (result < 0)// Request 1 value
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (sizes[0] != 10)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
if (*data[0] != data[0][1])
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
247
TestScripts/C Tests/DrefTests.h
Normal file
247
TestScripts/C Tests/DrefTests.h
Normal file
@@ -0,0 +1,247 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef DREFTESTS_H
|
||||
#define DREFTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int doGETDTest(char* drefs[], float* expected[], int count, int sizes[])
|
||||
{
|
||||
// Setup memory
|
||||
int* asizes = (int*)malloc(sizeof(int) * count);
|
||||
float** actual = (float**)malloc(sizeof(float*) * count);
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
asizes[i] = sizes[i];
|
||||
actual[i] = (float*)malloc(sizeof(float) * sizes[i]);
|
||||
}
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = getDREFs(sock, drefs, actual, count, asizes);
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test sizes and values
|
||||
result = compareArrays(expected, sizes, actual, asizes, count);
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
free(actual[i]);
|
||||
}
|
||||
free(actual);
|
||||
free(asizes);
|
||||
return result;
|
||||
}
|
||||
|
||||
int doDREFTest(char* drefs[], float* values[], float* expected[], int count, int sizes[])
|
||||
{
|
||||
// Setup memory
|
||||
int* asizes = (int*)malloc(sizeof(int) * count);
|
||||
float** actual = (float**)malloc(sizeof(float*) * count);
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
asizes[i] = sizes[i];
|
||||
actual[i] = (float*)malloc(sizeof(float) * sizes[i]);
|
||||
}
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = sendDREFs(sock, drefs, values, sizes, count);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getDREFs(sock, drefs, actual, count, asizes);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test sizes and values
|
||||
result = compareArrays(expected, sizes, actual, asizes, count);
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
free(actual[i]);
|
||||
}
|
||||
free(actual);
|
||||
free(asizes);
|
||||
return result;
|
||||
}
|
||||
|
||||
int testGETD_Basic()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit/switches/gear_handle_status", //int
|
||||
"sim/cockpit/autopilot/altitude", //float
|
||||
"sim/aircraft/prop/acf_prop_type", //int[8]
|
||||
"sim/cockpit2/switches/panel_brightness_ratio", //float[4]
|
||||
"sim/aircraft/view/acf_tailnum", //byte[40]
|
||||
"sim/flightmodel/position/elevation" //double
|
||||
};
|
||||
int sizes[] = { 1, 1, 8, 4, 40, 1 };
|
||||
float* expected[6];
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
expected[i] = (float*)malloc(sizeof(float) * sizes[i]);
|
||||
for (int j = 0; j < sizes[i]; ++j)
|
||||
{
|
||||
expected[i][j] = NAN;
|
||||
}
|
||||
}
|
||||
|
||||
return doGETDTest(drefs, expected, 6, sizes);
|
||||
}
|
||||
|
||||
int testGETD_TestFloat()
|
||||
{
|
||||
char* dref = "sim/test/test_float";
|
||||
int size = 1;
|
||||
float* expected[1];
|
||||
expected[0] = (float*)malloc(sizeof(float));
|
||||
expected[0][0] = 0.0F;
|
||||
|
||||
int result = doGETDTest(&dref, &expected, 1, &size);
|
||||
free(expected[0]);
|
||||
return result;
|
||||
}
|
||||
|
||||
int testGETD_Types()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit/switches/gear_handle_status", //int
|
||||
"sim/cockpit/autopilot/altitude", //float
|
||||
"sim/aircraft/prop/acf_prop_type", //int[8]
|
||||
"sim/cockpit2/switches/panel_brightness_ratio", //float[4]
|
||||
"sim/aircraft/view/acf_tailnum", //byte[40]
|
||||
"sim/flightmodel/position/elevation" //double
|
||||
};
|
||||
int sizes[] = { 1, 1, 8, 4, 40, 1 };
|
||||
float* data[6];
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
data[i] = (float*)malloc(sizeof(float) * sizes[i]);
|
||||
}
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = getDREFs(sock, drefs, data, 6, sizes);
|
||||
closeUDP(sock);
|
||||
|
||||
// Tests
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
// Verify sizes
|
||||
if (sizes[0] != 1 || sizes[1] != 1 || sizes[2] != 8
|
||||
|| sizes[3] != 4 || sizes[4] != 40 || sizes[5] != 1)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
// Verify integer drefs are integers
|
||||
if ((float)((int)data[0][0]) != data[0][0])
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
if ((float)((int)data[2][i]) != data[2][i])
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 40; ++i)
|
||||
{
|
||||
if ((float)((char)data[4][i]) != data[4][i])
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
// Verify tail number has at least one valid character
|
||||
if (data[4][0] <= 0 || data[4][0] > 127)
|
||||
{
|
||||
return -4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testDREF()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit/switches/gear_handle_status", //int
|
||||
"sim/cockpit/autopilot/altitude", //float
|
||||
"sim/aircraft/prop/acf_prop_type", //int[8]
|
||||
"sim/cockpit2/switches/panel_brightness_ratio", //float[4]
|
||||
"sim/aircraft/view/acf_tailnum", //byte[40]
|
||||
"sim/flightmodel/position/elevation" //double - Read only
|
||||
};
|
||||
float* values[6];
|
||||
float* expected[6];
|
||||
int sizes[6];
|
||||
|
||||
// Setup
|
||||
sizes[0] = 1;
|
||||
values[0] = (float*)malloc(sizes[0] * sizeof(float));
|
||||
expected[0] = values[0];
|
||||
values[0][0] = 1;
|
||||
|
||||
sizes[1] = 1;
|
||||
values[1] = (float*)malloc(sizes[1] * sizeof(float));
|
||||
expected[1] = values[1];
|
||||
values[1][0] = 4000.0F;
|
||||
|
||||
sizes[2] = 8;
|
||||
values[2] = (float*)malloc(sizes[2] * sizeof(float));
|
||||
expected[2] = values[2];
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
values[2][i] = 0;
|
||||
}
|
||||
|
||||
sizes[3] = 4;
|
||||
values[3] = (float*)malloc(sizes[3] * sizeof(float));
|
||||
expected[3] = values[3];
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
values[3][i] = 0.25F;
|
||||
}
|
||||
|
||||
sizes[4] = 40;
|
||||
values[4] = (float*)malloc(sizes[4] * sizeof(float));
|
||||
expected[4] = (float*)malloc(sizes[4] * sizeof(float));
|
||||
memset(values[4], 0, sizes[4] * sizeof(float));
|
||||
values[4][0] = 78.0F; //N
|
||||
values[4][1] = 55.0F; //7
|
||||
values[4][2] = 52.0F; //4
|
||||
values[4][3] = 56.0F; //8
|
||||
values[4][4] = 53.0F; //5
|
||||
values[4][5] = 89.0F; //Y
|
||||
|
||||
expected[4][0] = 78.0F; //N
|
||||
expected[4][1] = 55.0F; //7
|
||||
expected[4][2] = 52.0F; //4
|
||||
expected[4][3] = 56.0F; //8
|
||||
expected[4][4] = 53.0F; //5
|
||||
expected[4][5] = 89.0F; //Y
|
||||
for (int i = 6; i < sizes[4]; ++i)
|
||||
{
|
||||
expected[4][i] = NAN;
|
||||
}
|
||||
|
||||
sizes[5] = 1;
|
||||
values[5] = (float*)malloc(sizes[5] * sizeof(float));
|
||||
expected[5] = (float*)malloc(sizes[5] * sizeof(float));
|
||||
values[5][0] = 5000.0F;
|
||||
expected[5][0] = NAN;
|
||||
|
||||
return doDREFTest(drefs, values, expected, 6, sizes);
|
||||
}
|
||||
|
||||
#endif
|
||||
158
TestScripts/C Tests/PosiTests.h
Normal file
158
TestScripts/C Tests/PosiTests.h
Normal file
@@ -0,0 +1,158 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef POSITESTS_H
|
||||
#define POSITESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int doPOSITest(char* drefs[7], float values[], int size, int ac, float expected[7])
|
||||
{
|
||||
float* data[7];
|
||||
int sizes[7];
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
data[i] = (float*)malloc(sizeof(float) * 10);
|
||||
sizes[i] = 10;
|
||||
}
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
pauseSim(sock, 1);
|
||||
int result = sendPOSI(sock, values, size, ac);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getDREFs(sock, drefs, data, 7, sizes);
|
||||
}
|
||||
pauseSim(sock, 0);
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test values
|
||||
float actual[7];
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
actual[i] = data[i][0];
|
||||
}
|
||||
return compareArray(expected, actual, 7);
|
||||
}
|
||||
|
||||
int doGETPTest(float values[7], int ac, float expected[7])
|
||||
{
|
||||
// Execute Test
|
||||
float actual[7];
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = sendPOSI(sock, values, 7, ac);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getPOSI(sock, actual, ac);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Test values
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
if (fabs(expected[i] - actual[i]) > 1e-4)
|
||||
{
|
||||
return -10 - i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int basicPOSITest(char** drefs, int ac)
|
||||
{
|
||||
// Set psoition and initial orientation
|
||||
float POSI[7] = { 37.524F, -122.06899F, 2500, 0, 0, 0, 1 };
|
||||
float expected[7] = { 37.524F, -122.06899F, 2500, 0, 0, 0, 1 };
|
||||
int result = doPOSITest(drefs, POSI, 7, ac, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -10000 + result;
|
||||
}
|
||||
|
||||
// Set orientation
|
||||
POSI[0] = -998.0F;
|
||||
POSI[1] = -998.0F;
|
||||
POSI[2] = -998.0F;
|
||||
POSI[3] = 5.0F;
|
||||
POSI[4] = -5.0F;
|
||||
POSI[5] = 10.0F;
|
||||
POSI[6] = 0;
|
||||
|
||||
float *loc[3];
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
loc[i] = (float*)malloc(sizeof(float));
|
||||
}
|
||||
int sizes[3] = { 1, 1, 1 };
|
||||
XPCSocket sock = openUDP(IP);
|
||||
pauseSim(sock, 1);
|
||||
getDREFs(sock, drefs, loc, 3, sizes);
|
||||
closeUDP(sock);
|
||||
|
||||
expected[0] = loc[0][0];
|
||||
expected[1] = loc[1][0];
|
||||
expected[2] = loc[2][0];
|
||||
expected[3] = 5.0F;
|
||||
expected[4] = -5.0F;
|
||||
expected[5] = 10.0F;
|
||||
expected[6] = 0.0F;
|
||||
result = doPOSITest(drefs, POSI, 7, ac, expected);
|
||||
if (result < 0)
|
||||
{
|
||||
return -20000 + result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testPOSI_Player()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/flightmodel/position/latitude",
|
||||
"sim/flightmodel/position/longitude",
|
||||
"sim/flightmodel/position/elevation",
|
||||
"sim/flightmodel/position/theta",
|
||||
"sim/flightmodel/position/phi",
|
||||
"sim/flightmodel/position/psi",
|
||||
"sim/cockpit/switches/gear_handle_status"
|
||||
};
|
||||
return basicPOSITest(drefs, 0);
|
||||
}
|
||||
|
||||
int testPOSI_NonPlayer()
|
||||
{
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/multiplayer/position/plane1_lat",
|
||||
"sim/multiplayer/position/plane1_lon",
|
||||
"sim/multiplayer/position/plane1_el",
|
||||
"sim/multiplayer/position/plane1_the",
|
||||
"sim/multiplayer/position/plane1_phi",
|
||||
"sim/multiplayer/position/plane1_psi",
|
||||
"sim/multiplayer/position/plane1_gear_deploy"
|
||||
};
|
||||
return basicPOSITest(drefs, 1);
|
||||
}
|
||||
|
||||
int testGetPOSI_Player()
|
||||
{
|
||||
float POSI[7] = { 37.524F, -122.06899F, 2500, 0, 0, 0, 1 };
|
||||
return doGETPTest(POSI, 0, POSI);
|
||||
}
|
||||
|
||||
int testGetPOSI_NonPlayer()
|
||||
{
|
||||
float POSI[7] = { 37.624F, -122.06899F, 1500, 0, 0, 0, 1 };
|
||||
return doGETPTest(POSI, 3, POSI);
|
||||
}
|
||||
|
||||
#endif
|
||||
81
TestScripts/C Tests/SimuTests.h
Normal file
81
TestScripts/C Tests/SimuTests.h
Normal file
@@ -0,0 +1,81 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef SIMUTESTS_H
|
||||
#define SIMIUTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int doSIMUTest(int value, float expected)
|
||||
{
|
||||
int size = 20;
|
||||
float actual[20];
|
||||
char* dref = "sim/operation/override/override_planepath";
|
||||
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = pauseSim(sock, value);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getDREF(sock, dref, &actual, &size);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 20; ++i)
|
||||
{
|
||||
if (!feq(actual[i], expected) && !isnan(expected))
|
||||
{
|
||||
return -100 - i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testSIMU_Basic()
|
||||
{
|
||||
int result = doSIMUTest(0, 0);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
result = doSIMUTest(1, 1);
|
||||
if (result < 0)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
result = doSIMUTest(0, 0);
|
||||
if (result < 0)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testSIMU_Toggle()
|
||||
{
|
||||
int result = doSIMUTest(0, 0);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
result = doSIMUTest(2, 1);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
result = doSIMUTest(2, 0);
|
||||
if (result < 0)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
51
TestScripts/C Tests/Test.c
Normal file
51
TestScripts/C Tests/Test.c
Normal file
@@ -0,0 +1,51 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#include "Test.h"
|
||||
|
||||
int testFailed = 0;
|
||||
int testPassed = 0;
|
||||
|
||||
void runTest(int(*test)(), char* name)
|
||||
{
|
||||
printf("Running test %s... ", name);
|
||||
int result = test(); // Run Test
|
||||
if (result == 0)
|
||||
{
|
||||
printf("PASSED\n");
|
||||
testPassed++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Test %s - FAILED\n\tError: %i\n", name, result);
|
||||
testFailed++;
|
||||
}
|
||||
}
|
||||
|
||||
int compareFloat(float expected, float actual)
|
||||
{
|
||||
return feq(expected, actual) || isnan(expected) ? 0 : -1;
|
||||
}
|
||||
|
||||
int compareArray(float expected[], float actual[], int size)
|
||||
{
|
||||
return compareArrays(&expected, &size, &actual, &size, 1);
|
||||
}
|
||||
|
||||
int compareArrays(float* expected[], int esizes[], float* actual[], int asizes[], int count)
|
||||
{
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
if (esizes[i] != asizes[i])
|
||||
{
|
||||
return -100 - i;
|
||||
}
|
||||
for (int j = 0; j < esizes[i]; ++j)
|
||||
{
|
||||
if (!feq(actual[i][j], expected[i][j]) && !isnan(expected[i][j]))
|
||||
{
|
||||
return -1000 - i * 100 - j;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
25
TestScripts/C Tests/Test.h
Normal file
25
TestScripts/C Tests/Test.h
Normal file
@@ -0,0 +1,25 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef TESTRUNNER_H
|
||||
#define TESTRUNNER_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#define feq(x, y) (fabs(x - y) < 1e-4)
|
||||
|
||||
#define IP "127.0.0.1"
|
||||
|
||||
extern int testFailed;
|
||||
extern int testPassed;
|
||||
|
||||
void runTest(int(*test)(), char* name);
|
||||
|
||||
int compareFloat(float expected, float actual);
|
||||
int compareArray(float expected[], float actual[], int size);
|
||||
int compareArrays(float* expected[], int esizes[], float* actual[], int asizes[], int count);
|
||||
|
||||
#endif
|
||||
32
TestScripts/C Tests/TextTests.h
Normal file
32
TestScripts/C Tests/TextTests.h
Normal file
@@ -0,0 +1,32 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef TEXTTESTS_H
|
||||
#define TEXTTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int testTEXT()
|
||||
{
|
||||
// Setup
|
||||
XPCSocket sendPort = openUDP(IP);
|
||||
int x = 100;
|
||||
int y = 700;
|
||||
char* msg = "This is an X-Plane Connect test message.\nThis should be a new line.\r\nThat will be parsed as two line breaks.";
|
||||
|
||||
// Test
|
||||
sendTEXT(sendPort, msg, x, y);
|
||||
// NOTE: Manually verify that msg appears on the screen in X-Plane!
|
||||
|
||||
sendTEXT(sendPort, "Another test message", x, y);
|
||||
// NOTE: Manually verify that msg appears on the screen and that no part of the previous
|
||||
// message is visible.
|
||||
|
||||
sendTEXT(sendPort, NULL, -1, -1);
|
||||
|
||||
// Cleanup
|
||||
closeUDP(sendPort);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
55
TestScripts/C Tests/UDPTests.h
Normal file
55
TestScripts/C Tests/UDPTests.h
Normal file
@@ -0,0 +1,55 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef UDPTESTS_H
|
||||
#define UDPTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int testOpen()
|
||||
{
|
||||
XPCSocket sock = openUDP("localhost");
|
||||
int result = strncmp(sock.xpIP, "127.0.0.1", 16);
|
||||
closeUDP(sock);
|
||||
return result;
|
||||
}
|
||||
|
||||
int testClose()
|
||||
{
|
||||
XPCSocket sendPort = aopenUDP(IP, 49009, 49063);
|
||||
closeUDP(sendPort);
|
||||
sendPort = aopenUDP(IP, 49009, 49063);
|
||||
closeUDP(sendPort);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testCONN()
|
||||
{
|
||||
// Initialize
|
||||
char* drefs[] =
|
||||
{
|
||||
"sim/cockpit/switches/gear_handle_status"
|
||||
};
|
||||
float data[1];
|
||||
int size = 1;
|
||||
XPCSocket sock = openUDP(IP);
|
||||
#if (__APPLE__ || __linux)
|
||||
usleep(0);
|
||||
#endif
|
||||
|
||||
// Execution
|
||||
setCONN(&sock, 49055);
|
||||
int result = getDREF(sock, drefs[0], data, &size);
|
||||
|
||||
// Close
|
||||
closeUDP(sock);
|
||||
|
||||
// Test
|
||||
if (result < 0)// No data received
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
73
TestScripts/C Tests/ViewTests.h
Normal file
73
TestScripts/C Tests/ViewTests.h
Normal file
@@ -0,0 +1,73 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef VIEWTESTS_H
|
||||
#define VIEWTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
XPC_VDREF_FORWARDS = 1000,
|
||||
XPC_VDREF_DOWN4 = 1001,
|
||||
XPC_VDREF_DOWN8 = 1002,
|
||||
XPC_VDREF_LEFT45 = 1004,
|
||||
XPC_VDREF_RIGHT45 = 1005,
|
||||
XPC_VDREF_LEFT90 = 1006,
|
||||
XPC_VDREF_RIGHT90 = 1007,
|
||||
XPC_VDREF_LEFT135 = 1008,
|
||||
XPC_VDREF_RIGHT135 = 1009,
|
||||
XPC_VDREF_BACKWARD = 1010,
|
||||
XPC_VDREF_LEFTUP = 1011,
|
||||
XPC_VDREF_RIGHTUP = 1012,
|
||||
XPC_VDREF_AIRPORTBEACONTOWER = 1014,
|
||||
XPC_VDREF_ONRUNWAY = 1015,
|
||||
XPC_VDREF_CHASE = 1017,
|
||||
XPC_VDREF_FOLLOW = 1018,
|
||||
XPC_VDREF_FOLLOWWITHPANEL = 1019,
|
||||
XPC_VDREF_SPOT = 1020,
|
||||
XPC_VDREF_SPOTMOVING = 1021,
|
||||
XPC_VDREF_FULLSCREENWITHHUD = 1023,
|
||||
XPC_VDREF_FULLSCREENNOHUD = 1024,
|
||||
XPC_VDREF_STRAIGHTDOWN = 1025,
|
||||
XPC_VDREF_3DCOCKPIT = 1026
|
||||
} VIEW_DREF;
|
||||
|
||||
int doViewTest(VIEW_TYPE viewCommand, VIEW_DREF viewResult)
|
||||
{
|
||||
// Setup
|
||||
char* dref = "sim/graphics/view/view_type";
|
||||
float value;
|
||||
int size = 1;
|
||||
|
||||
// Execute command
|
||||
XPCSocket sock = openUDP(IP);
|
||||
int result = sendVIEW(sock, viewCommand);
|
||||
if (result >= 0)
|
||||
{
|
||||
result = getDREF(sock, dref, &value, &size);
|
||||
}
|
||||
closeUDP(sock);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((int)value != viewResult)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int testView()
|
||||
{
|
||||
int result = doViewTest(XPC_VIEW_FORWARDS, XPC_VDREF_FORWARDS);
|
||||
if (result < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return doViewTest(XPC_VIEW_CHASE, XPC_VDREF_CHASE);
|
||||
}
|
||||
#endif
|
||||
42
TestScripts/C Tests/WyptTests.h
Normal file
42
TestScripts/C Tests/WyptTests.h
Normal file
@@ -0,0 +1,42 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
#ifndef WYPTTESTS_H
|
||||
#define WYPTTESTS_H
|
||||
|
||||
#include "Test.h"
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
int testWYPT()
|
||||
{
|
||||
// Setup
|
||||
XPCSocket sock = openUDP(IP);
|
||||
float points[] =
|
||||
{
|
||||
37.5245F, -122.06899F, 2500,
|
||||
37.455397F, -122.050037F, 2500,
|
||||
37.469567F, -122.051411F, 2500,
|
||||
37.479376F, -122.060509F, 2300,
|
||||
37.482237F, -122.076130F, 2100,
|
||||
37.474881F, -122.087288F, 1900,
|
||||
37.467660F, -122.079391F, 1700,
|
||||
37.466298F, -122.090549F, 1500,
|
||||
37.362562F, -122.039223F, 1000,
|
||||
37.361448F, -122.034416F, 1000,
|
||||
37.361994F, -122.026348F, 1000,
|
||||
37.365541F, -122.022572F, 1000,
|
||||
37.373727F, -122.024803F, 1000,
|
||||
37.403869F, -122.041283F, 50,
|
||||
37.418544F, -122.049222F, 6
|
||||
};
|
||||
|
||||
// Test
|
||||
sendWYPT(sock, XPC_WYPT_CLR, NULL, 0);
|
||||
sendWYPT(sock, XPC_WYPT_ADD, points, 15);
|
||||
// NOTE: Visually ensure waypoints are added in the sim
|
||||
|
||||
// Cleanup
|
||||
closeUDP(sock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user