blob: d4b35243c0f195a1dc07e701d1f38d9854a1ce71 [file] [log] [blame]
// Copyright 2003-2004 The Apache Software Foundation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <iostream.h>
#include <fstream.h>
#include <sys/time.h>
#include "gen_src/InteropTestPortType.h"
/////////////////////////////////////////////////////////////////////////////
//
struct timeval time1, time2;
struct timezone zone;
void tm_init()
{
zone.tz_minuteswest = 0;
zone.tz_dsttime = 0;
}
#define tm_start() gettimeofday(&time1, &zone);
int diff_time(struct timeval *time2, struct timeval *time1)
{
return 1000000 * (time2->tv_sec - time1->tv_sec)
+ time2->tv_usec - time1->tv_usec;
}
int inline tm_stop()
{
gettimeofday(&time2, &zone);
return diff_time(&time2, &time1);
}
/////////////////////////////////////////////////////////////////////////////
//
//#define NUM_TEST_RUNS 5
#define TEST_STRING_DATA
//#define TEST_INT_DATA
//#define TEST_FLOAT_DATA
//#define TEST_STRUCT_DATA
/////////////////////////////////////////////////////////////////////////////
//
#define MAX_LINE_LEN 256
//int test_rslt[NUM_TEST_RUNS];
int* test_rslt;
int next_elem;
#ifdef TEST_STRING_DATA
#define DATA_TYPE char*
#define DATA_FILE "stringdata.txt"
xsd__string_Array testdata;
#else
#ifdef TEST_INT_DATA
#define DATA_TYPE int
#define DATA_FILE "intdata.txt"
xsd__int_Array testdata;
#else
#ifdef TEST_FLOAT_DATA
#define DATA_TYPE float
#define DATA_FILE "floatdata.txt"
xsd__float_Array testdata;
#else
#ifdef TEST_STRUCT_DATA
#define DATA_TYPE ns_SOAPStruct
#define DATA_FILE "structdata.txt"
SOAPStruct_Array testdata;
#endif
#endif
#endif
#endif
////////////////////////////////////////////////////////////////////////////////
//
InteropTestPortType tester;
char *pchBuff;
void inittestdata(int array_sz)
{
testdata.m_Size = array_sz;
#ifdef TEST_STRING_DATA
if( !(testdata.m_Array = new char *[array_sz]))
#else
if (!(testdata.m_Array = (DATA_TYPE *)malloc(sizeof(DATA_TYPE) * array_sz)))
#endif
exit(-1);
next_elem = 0;
}
int storetestdata(char* pchBuff)
{
#ifdef TEST_STRING_DATA
//testdata.m_Array[next_elem] = pchBuff;
testdata.m_Array[next_elem] = new char [strlen(pchBuff) + 2];
strcpy(testdata.m_Array[next_elem], pchBuff);
//printf("pchBuff:%s\n", pchBuff);
//printf("testdata.m_Array:%s", testdata.m_Array[next_elem]);
//printf("next_elem:%d\n", next_elem);
if (testdata.m_Array == NULL)
exit(-1);
#else
#ifdef TEST_INT_DATA
testdata.m_Array[next_elem] = strtol(s, NULL, 10);
#else
#ifdef TEST_FLOAT_DATA
testdata.m_Array[next_elem] = strtof(s, NULL);
#else
#ifdef TEST_STRUCT_DATA
// TODO
printf("\nERROR: TODO!\n");
exit(-1);
#endif
#endif
#endif
#endif
return ++next_elem < testdata.m_Size;
}
void gettestdata(int intMaxLineLen)
{
FILE *filePtr = fopen(DATA_FILE, "rt");
if (filePtr) {
pchBuff = new char [intMaxLineLen];
while (fgets(pchBuff, intMaxLineLen, filePtr))
{
//printf("pchBuff:%s\n", pchBuff);
if (!storetestdata(pchBuff))
return;
}
fclose(filePtr);
exit(-1);
}
perror("Error");
exit(-1);
}
void test(int intNumRuns)
{
test_rslt = new int[intNumRuns];
printf("\nStarting... (microseconds)\n");
for (int ii = 0; ii < intNumRuns; ii++) {
tm_start();
if (tester.
#ifdef TEST_STRING_DATA
echoStringArray
#else
#ifdef TEST_INT_DATA
echoIntegerArray
#else
#ifdef TEST_FLOAT_DATA
echoFloatArray
#else
#ifdef TEST_STRUCT_DATA
echoStructArray
#endif
#endif
#endif
#endif
(testdata).m_Array == NULL) {
printf("\nError: No data returned!\n");
exit(-1);
}
test_rslt[ii] = tm_stop();
printf("\n%d\n", test_rslt[ii]);
}
printf("\nDone.\n");
}
void save_results(char *save_as, char *desc, int intNumRuns)
{
FILE *s = fopen(save_as, "wt");
if (s) {
fprintf(s, "%s\n", desc);
for (int ii = 0; ii < intNumRuns; ii++)
fprintf(s, "%d\n", test_rslt[ii]);
fclose(s);
printf("\nResult saved as %s\n", save_as);
}
else {
perror("Error");
exit(-1);
}
}
int main(int argc, char **argv)
{
if (6 == argc) {
int intNumElements = strtol(argv[1], NULL, 0);
int intMaxLineLen = strtol(argv[2], NULL, 0);
int intNumRuns = strtol(argv[3], NULL, 0);
printf("\nArray size: %d\n", intNumElements);
printf("\nMaximum line length: %d\n", intMaxLineLen);
printf("\nNumber of runs: %d\n", intNumRuns);
inittestdata(intNumElements);
gettestdata(intMaxLineLen);
test(intNumRuns);
// FIXME:
save_results(argv[4], argv[5], intNumRuns);
return 0;
}
printf("\nenter:largeArrays <array size> <maximum line length> <number of runs> <datafile> <comment>\n");
return -1;
}