#
# stringlisttest_globus
#
@PROBLEM stringlisttest_globus
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
String list test
@INPUT 1
@OBJECT STRINGLIST x
string list in input
@OUTPUT 1
@OBJECT SCALAR I count
Character count
@CUSTOMIZED GLOBUS
@COMPLEXITY 1,2
@CALLINGSEQUENCE
@ARG I0
@ARG mI0
@ARG O0

@CODE
  int i;
  int wc = 0;

  for (i=0;i<*@mI0@;i++)
    wc += strlen(@I0@[i]);

  @O0@ = (int *)calloc(1,sizeof(int));
  *@O0@ = wc;
@END_CODE
#
# doubletest_globus
#
@PROBLEM doubletest_globus
@INCLUDE <unistd.h>
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
Basic test
Adds 1 to an integer
@INPUT 1
@OBJECT SCALAR D x
integer in input
@OUTPUT 1
@OBJECT SCALAR D OUTPUT
integer in output
@CUSTOMIZED GLOBUS
@COMPLEXITY 1000000,20000
@CALLINGSEQUENCE
@ARG I0,O0

@CODE
  *(@I0@) = *(@I0@) + 1.0;
  @O0@ = @I0@;
  sleep(20);
@END_CODE

#
# inttest_globus
#
@PROBLEM inttest_globus
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
Basic test
Adds 1 to an integer
@INPUT 1
@OBJECT SCALAR I X
integer in input
@OUTPUT 1
@OBJECT SCALAR I O
integer in output
@CUSTOMIZED GLOBUS
@COMPLEXITY 1,1
@CALLINGSEQUENCE
@ARG I0,O0

@CODE
  *(@I0@) = *(@I0@) + 1;
  @O0@ = @I0@;
  fprintf(stdout,"(The server has slept for 6 seconds for this test)");
  sleep(20);
@END_CODE

#
# packedfiletest_globus
#
@PROBLEM packedfiletest_globus
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
Basic test,
receives packed files, and
return them packed (with "DONE" appended to
each of them)
@INPUT 1
@OBJECT PACKEDFILES packed
n packed files
@OUTPUT 1
@OBJECT PACKEDFILES packed
n packed files
@CUSTOMIZED GLOBUS
@COMPLEXITY 1,1
@CALLINGSEQUENCE
@ARG mI0
@ARG I0
@ARG O0

@CODE
char command[256];
int i,n;
char buffer[256];

n = *@mI0@;

@O0@ = (char **)calloc(n,sizeof(char*));
for (i=0;i<n;i++)
{
  sprintf(buffer,"fuck%d",i);
  @O0@[i] =strdup(buffer);
  sprintf(command,"cp %s %s",@I0@[i],@O0@[i]);
  system(command);
  sprintf(command,"echo DONE >> %s",@O0@[i]);
  system(command);
}
*@mO0@ = n;

@END_CODE

#
# stringtest_globus
#
@PROBLEM stringtest_globus
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
Basic test
@INPUT 1
@OBJECT STRING string
A string
@OUTPUT 1
@OBJECT STRING newstring
the same string with
another first charcter
@CUSTOMIZED GLOBUS
@COMPLEXITY 1,1
@CALLINGSEQUENCE
@ARG I0,O0

@CODE
  @O0@ = @I0@;
  @O0@[0] = 'X';
  
@END_CODE


#
# chartest_globus
#
@PROBLEM chartest_globus
@LANGUAGE C
@MAJOR COL
@PATH /Testing/
@DESCRIPTION
Basic test
Returns a matrix of chars
@INPUT 1
@OBJECT SCALAR I x
Any integer

@OUTPUT 1
@OBJECT MATRIX CHAR output
A matrix of chars
@CUSTOMIZED GLOBUS
@COMPLEXITY 1,1
@CALLINGSEQUENCE
@ARG I0,O0

@CODE

  @O0@ = (char*)calloc(4,sizeof(char));

  @O0@[0] = 'a';
  @O0@[1] = 'b';
  @O0@[2] = 'c';
  @O0@[3] = 'd';
  *@mO0@ = 2;
  *@nO0@ = 2;
@END_CODE


#
# totaltest_globus
#
@PROBLEM totaltest_globus
@LANGUAGE C
@MAJOR ROW
@PATH /Testing/
@DESCRIPTION
Tests all the data types and structures.

@INPUT 22
@OBJECT SCALAR I SI
si
@OBJECT VECTOR I VI
vi
@OBJECT MATRIX I MI
mi
@OBJECT SCALAR CHAR SCHAR
schar
@OBJECT VECTOR CHAR VCHAR
vchar
@OBJECT MATRIX CHAR MCHAR
mchar
@OBJECT SCALAR S SS
ss
@OBJECT VECTOR S VS
vs
@OBJECT MATRIX S MS
ms
@OBJECT SCALAR D SD
sd
@OBJECT VECTOR D VD
vd
@OBJECT MATRIX D MD
md
@OBJECT SCALAR C SC
sc
@OBJECT VECTOR C VC
vc
@OBJECT MATRIX C MC
mc
@OBJECT SCALAR Z SZ
sz
@OBJECT VECTOR Z VZ
vz
@OBJECT MATRIX Z MZ
mz
@OBJECT SCALAR B SB
sb
@OBJECT VECTOR B VB
vb
@OBJECT MATRIX B MB
mb
@OBJECT STRING ST
st

@OUTPUT 22
@OBJECT SCALAR I SI
si
@OBJECT VECTOR I VI
vi
@OBJECT MATRIX I MI
mi
@OBJECT SCALAR CHAR SCHAR
schar
@OBJECT VECTOR CHAR VCHAR
vchar
@OBJECT MATRIX CHAR MCHAR
mchar
@OBJECT SCALAR S SS
ss
@OBJECT VECTOR S VS
vs
@OBJECT MATRIX S MS
ms
@OBJECT SCALAR D SD
sd
@OBJECT VECTOR D VD
vd
@OBJECT MATRIX D MD
md
@OBJECT SCALAR C SC
sc
@OBJECT VECTOR C VC
vc
@OBJECT MATRIX C MC
mc
@OBJECT SCALAR Z SZ
sz
@OBJECT VECTOR Z VZ
vz
@OBJECT MATRIX Z MZ
mz
@OBJECT SCALAR B SB
sb
@OBJECT VECTOR B VB
vb
@OBJECT MATRIX B MB
mb
@OBJECT STRING ST
st

@CUSTOMIZED GLOBUS
@COMPLEXITY 15,2
@CALLINGSEQUENCE
@ARG I0,O0
@ARG I1,O1
@ARG mI1
@ARG I2,O2
@ARG mI2
@ARG nI2
@ARG lI2,lO2
@ARG I3,O3
@ARG I4,O4
@ARG mI4
@ARG I5,O5
@ARG mI5
@ARG nI5
@ARG lI5,lO5
@ARG I6,O6
@ARG I7,O7
@ARG mI7
@ARG I8,O8
@ARG mI8
@ARG nI8
@ARG lI8,lO8
@ARG I9,O9
@ARG I10,O10
@ARG mI10
@ARG I11,O11
@ARG mI11
@ARG nI11
@ARG lI11,lO11
@ARG I12,O12
@ARG I13,O13
@ARG mI13
@ARG I14,O14
@ARG mI14
@ARG nI14
@ARG lI14,lO14
@ARG I15,O15
@ARG I16,O16
@ARG mI16
@ARG I17,O17
@ARG mI17
@ARG nI17
@ARG lI17,lO17
@ARG I18,O18
@ARG I19,O19
@ARG mI19
@ARG I20,O20
@ARG mI20
@ARG nI20
@ARG lI20,lO20
@ARG I21,O21

@CODE
int i;


# Doing the loops

# Integers 

@I0@[0]+=1;
for (i=0;i<*@mI1@;i++)
  @I1@[i]+=1;
for (i=0;i<(*@mI2@) * (*@nI2@);i++)
  @I2@[i]+=1;

# Chars

@I3@[0]+=1;
for (i=0;i<*@mI4@;i++)
  @I4@[i]+=1;
for (i=0;i<(*@mI5@) * (*@nI5@);i++)
  @I5@[i]+=1;

# Floats

@I6@[0]+=1.0;
for (i=0;i<*@mI7@;i++)
  @I7@[i]+=1.0;
for (i=0;i<(*@mI8@)*(*@nI8@);i++)
  @I8@[i]+=1.0;

# Double

@I9@[0]+=1.0;
for (i=0;i<*@mI10@;i++)
  @I10@[i]+=1.0;
for (i=0;i<(*@mI11@)*(*@nI11@);i++)
  @I11@[i]+=1.0;

# Single Complex

@I12@[0].i+=1.0;
@I12@[0].r+=1.0;
for (i=0;i<*@mI13@;i++)
{
  @I13@[i].i+=1.0;
  @I13@[i].r+=1.0;
}
for (i=0;i<(*@mI14@)*(*@nI14@);i++)
{
  @I14@[i].i+=1.0;
  @I14@[i].r+=1.0;
}

# Double Complex

@I15@[0].i+=1.0;
@I15@[0].r+=1.0;
for (i=0;i<*@mI16@;i++)
{
  @I16@[i].i+=1.0;
  @I16@[i].r+=1.0;
}
for (i=0;i<(*@mI17@)*(*@nI17@);i++)
{
  @I17@[i].i+=1.0;
  @I17@[i].r+=1.0;
}

# Byte

@I18@[0]+=1;
for (i=0;i<*@mI19@;i++)
{
  @I19@[i]+=1;
}
for (i=0;i<(*@mI20@)*(*@nI20@);i++)
{
  @I20@[i]+=1;
}

# String
@I21@[0] = 'B';

# Setting the output

# Integers

@O0@ = @I0@;
@O1@ = @I1@;
*@mO1@ = *@mI1@;
@O2@ = @I2@;
*@mO2@ = *@mI2@;
*@nO2@ = *@nI2@;

# Chars

@O3@ = @I3@;
@O4@ = @I4@;
*@mO4@ = *@mI4@;
@O5@ = @I5@;
*@mO5@ = *@mI5@;
*@nO5@ = *@nI5@;

# Floats

@O6@ = @I6@;
@O7@ = @I7@;
*@mO7@ = *@mI7@;
@O8@ = @I8@;
*@mO8@ = *@mI8@;
*@nO8@ = *@nI8@;

# Double

@O9@ = @I9@;
@O10@ = @I10@;
*@mO10@ = *@mI10@;
@O11@ = @I11@;
*@mO11@ = *@mI11@;
*@nO11@ = *@nI11@;

# Single Complex

@O12@ = @I12@;
@O13@ = @I13@;
*@mO13@ = *@mI13@;
@O14@ = @I14@;
*@mO14@ = *@mI14@;
*@nO14@ = *@nI14@;

# Double Complex

@O15@ = @I15@;
@O16@ = @I16@;
*@mO16@ = *@mI16@;
@O17@ = @I17@;
*@mO17@ = *@mI17@;
*@nO17@ = *@nI17@;

# Bytes

@O18@ = @I18@;
@O19@ = @I19@;
*@mO19@ = *@mI19@;
@O20@ = @I20@;
*@mO20@ = *@mI20@;
*@nO20@ = *@nI20@;

# String
@O21@ = @I21@;

@END_CODE


#
# upftest
#
@PROBLEM upftest_globus
@LANGUAGE FORTRAN
@MAJOR  COL
@PATH /Testing/upftest/
@DESCRIPTION
This is a test for the UPF mechanism

Performs B = upf0(upf1((A)).

the prototypes are :

@INPUT 3
@OBJECT UPF f1
Function #1
SUBROUTINE UPF0(A,B)
INTEGER A,B
or
void upf(a,b)
int *a, *b;

@OBJECT UPF f2
Function #2
SUBROUTINE UPF1(A,B)
INTEGER A,B
or
void upf(a,b)
int *a, *b;

@OBJECT SCALAR I x
Scalar A
@OUTPUT 1
@OBJECT SCALAR I y
Scalar B
@CUSTOMIZED GLOBUS
@COMPLEXITY 15,2

@CALLINGSEQUENCE
@ARG I0
@ARG I1
@ARG I2
@ARG O0

@CODE
extern int upf0();
extern int upf1();

@O0@ = (int *)malloc(sizeof(int));

upf0(@I2@,@O0@);

upf1(@O0@, @O0@);

@END_CODE

#
# filetest
#
@PROBLEM filetest_globus
@LANGUAGE C
@MAJOR  ROW
@PATH /Testing/filetest/
@DESCRIPTION
This is a test for the FILE mechanism
Does nothing on a file :)

@INPUT 1
@OBJECT FILE f
some file

@OUTPUT 1
@OBJECT FILE f
the same file

@CUSTOMIZED GLOBUS
@COMPLEXITY 1,1

@CALLINGSEQUENCE
@ARG I0
@ARG O0

@CODE
char command[256];

sprintf(command,"cp %s %s",@I0@,@O0@);
system(command);
sprintf(command,"echo DONE >> %s",@O0@);
system(command);
@END_CODE

