begin 
owninteger  failures=0

routine  pass
  printstring(" -- Pass"); newline
end 
routine  fail
  printstring(" -- FAIL"); newline
  failures = failures+1
end 

own integer  one=1, two=2, three=3, four=4, dump

routine  SINGLE
own integer array  one10(1:10) =
 1,2,3,4,5,6,7,8,9,10
own integer array  two11(1:11) =
 2,4,6,8,10,12,14,16,18,20,22
owninteger  j=10
integer array  three10(1:j)
integer array name  an10(1:10)
integer array name  anstar(1:*)
integer array name  an
  three10(j) = j*3 for  j = 1,1,10

routine  r10(integer array name  a(1:10),integer  k)
integer  i,j=0
  for  i = 1,1,10 cycle 
    j = 1 if  a(i) # i*k
  repeat 
  if  j = 0 then  pass else  fail
end 
routine  rstar(integer array name  a(1:*),integer  k,l)
integer  i,j=0
  for  i = 1,1,l cycle 
    j = 1 if  a(i) # i*k
  repeat 
  if  j = 0 then  pass else  fail
end 
routine  rv(integer array name  a(integer  m:integer  l),integer  k)
integer  i,j=0
  for  i = m,1,l cycle 
    j = 1 if  a(i) # i*k
  repeat 
  if  j = 0 then  pass else  fail
end 
  printstring("r10(one10,1)"); r10(one10,1)

  printstring("rstar(one10,1,10)"); rstar(one10,1,10)
  printstring("rstar(two11,2,11)"); rstar(two11,2,11)
  printstring("rstar(three10,3,10)"); rstar(three10,3,10)

  printstring("rv(one10,1)"); rv(one10,1)
  printstring("rv(two11,2)"); rv(two11,2)
  printstring("rv(three10,3)"); rv(three10,3)

  printstring("an10 == one10; r10(an10,1)")
  an10 == one10; r10(an10,1)

  printstring("an10 == one10; rstar(an10,1,10)")
  an10 == one10; rstar(an10,1,10)
  printstring("anstar == one10; rstar(anstar,1,10)")
  anstar == one10; rstar(anstar,1,10)
  printstring("anstar == two11; rstar(anstar,2,11)")
  anstar == two11; rstar(anstar,2,11)
  printstring("anstar == three10; rstar(anstar,3,10)")
  anstar == three10; rstar(anstar,3,10)

  printstring("an10 == one10; rv(an10,1)")
  an10 == one10; rv(an10,1)
  printstring("an == one10; rv(an,1)")
  an == one10; rv(an,1)
  printstring("an == two11; rv(an,2)")
  an == two11; rv(an,2)
  printstring("an == three10; rv(an,3)")
  an == three10; rv(an,3)
end                         {single}

routine  DOUBLE
own integer array  one10(1:10,-1:1) =
 1,101,201,2,102,202,3,103,203,4,104,204,
 5,105,205,6,106,206,7,107,207,8,108,208,
 9,109,209,10,110,210
own integer array  two11(1:11,-1:1) =
 2,102,202,4,104,204,6,106,206,8,108,208,
 10,110,210,12,112,212,14,114,214,16,116,216,
 18,118,218,20,120,220,22,122,222
owninteger  i,j,k=10
integer array  three10(1:k,-1:1)
integer array name  an10(1:10,-1:1)
integer array name  anstar(1:*,-1:1)
integer array (2)name  an
  for  i = 1,1,10 cycle 
    three10(i,j) = i*3+100+j*100 for  j = -1,1,1
  repeat 

routine  r10(integer array name  a(1:10,-1:1),integer  k)
integer  i,j,e=0
  for  i = 1,1,10 cycle 
    for  j = -1,1,1 cycle 
      e = 1 if  a(i,j) # i*k+100+j*100
    repeat 
  repeat 
  if  e = 0 then  pass else  fail
end 
routine  rstar(integer array name  a(1:*,-1:1),integer  k,l)
integer  i,j,e=0
  for  i = 1,1,l cycle 
    for  j = -1,1,1 cycle 
      e = 1 if  a(i,j) # i*k+100+j*100
    repeat 
  repeat 
  if  e = 0 then  pass else  fail
end 
routine  rv(integer array name  a(1:integer  l,short  x:byte  y),integer  k)
integer  i,j,e=0
  for  i = 1,1,l cycle 
    for  j = x,1,y cycle 
      e = 1 if  a(i,j) # i*k+100+j*100
    repeat 
  repeat 
  if  e = 0 then  pass else  fail
end 
  printstring("r10(one10,1)"); r10(one10,1)

  printstring("rstar(one10,1,10)"); rstar(one10,1,10)
  printstring("rstar(two11,2,11)"); rstar(two11,2,11)
  printstring("rstar(three10,3,10)"); rstar(three10,3,10)

  printstring("rv(one10,1)"); rv(one10,1)
  printstring("rv(two11,2)"); rv(two11,2)
  printstring("rv(three10,3)"); rv(three10,3)

  printstring("an10 == one10; r10(an10,1)")
  an10 == one10; r10(an10,1)

  printstring("an10 == one10; rstar(an10,1,10)")
  an10 == one10; rstar(an10,1,10)
  printstring("anstar == one10; rstar(anstar,1,10)")
  anstar == one10; rstar(anstar,1,10)
  printstring("anstar == two11; rstar(anstar,2,11)")
  anstar == two11; rstar(anstar,2,11)
  printstring("anstar == three10; rstar(anstar,3,10)")
  anstar == three10; rstar(anstar,3,10)

  printstring("an10 == one10; rv(an10,1)")
  an10 == one10; rv(an10,1)
!  printstring("an == one10; rv(an,1)")
!  an == one10; rv(an,1)
!  printstring("an == two11; rv(an,2)")
!  an == two11; rv(an,2)
!  printstring("an == three10; rv(an,3)")
!  an == three10; rv(an,3)
end                         {double}

routine  STRINGSTAR
string (3)array  sa(1:4)
own string (10)array  sb(1:4)="tom", "dick", "harry", "archibaldy"
  sa(1) = "ABC"; sa(2) = "DEF"; sa(3) = "GHI"; sa(4) = "JKL"
routine  try(string (*)array name  s,integer  j)
integer  i
  for  i = 1,1,4 cycle 
    if  j = 1 start 
      if  s(i) = sa(i) then  pass else  fail
    else 
      if  s(i) = sb(i) then  pass else  fail
    finish 
  repeat 
end 
  printstring("Stringstar 1")
  try(sa,1)
  printstring("Stringstar 2")
  try(sb,2)
end 
  open output(1,"JOURNAL")
  single
  double
  stringstar
select output(0)
write(failures,1);  printstring(" failure(s)");  newline
end