#!/usr/local/bin/python
#
# File:        argstest
# Copyright:   (c) 2001 The Regents of the University of California
# Revision:    @(#) $Revision: 4434 $
# Date:        $Date: 2005-03-17 09:05:29 -0800 (Thu, 17 Mar 2005) $
# Description: Exercise every kind of argument
#
# Try to exercise everything possible in Python.

import Args.Cchar
import Args.Cfcomplex
import Args.Cdcomplex
import Args.Clong
import Args.Cint
import Args.Cbool
import Args.Cdouble
import Args.Cfloat
import Numeric
from synch.ResultType import *
from synch import RegOut

def toFloat(d):
  tmp = Numeric.zeros((1,), Numeric.Float32)
  try:
    tmp.savespace(1)
    tmp[0] = d
  except AttributeError:
    # don't die!
    tmp[0] = d
  return tmp[0]

class TestCounter:

  def __init__(self, numparts = -1):
    self.tracker = RegOut.RegOut()
    self.partno = 0
    self.tracker.setExpectations(numparts)

  def describeTest(self, description):
    self.partno = self.partno + 1
    self.tracker.startPart(self.partno)
    self.tracker.writeComment(description)

  def evalTest(self, result, expected=1):
    if (result):
      if (expected):
        self.tracker.endPart(self.partno, PASS)
      else:
        self.tracker.endPart(self.partno, XPASS)
    else:
      if (expected):
        self.tracker.endPart(self.partno, FAIL)
      else:
        self.tracker.endPart(self.partno, XFAIL)
        
  def finish(self):
    self.tracker.close()
      

if __name__ == '__main__':
  counter = TestCounter()

  # boolean test
  obj = Args.Cbool.Cbool()
  counter.describeTest('obj = Args.Cbool.Cbool()')
  obj = Args.Cbool.Cbool()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback()')
  counter.evalTest(obj.returnback())

  counter.describeTest('obj.passin(1)')
  counter.evalTest(obj.passin(1))

  counter.describeTest('(1, 1) == obj.passout()')
  counter.evalTest((1, 1) == obj.passout())

  counter.describeTest('(1, 0) == obj.passinout(1)')
  counter.evalTest((1, 0) == obj.passinout(1))

  counter.describeTest('(1, 1, 1) = obj.passeverywhere(1, 0)')
  counter.evalTest((1, 1, 1) == obj.passeverywhere(1, 0))
  
  # char test
  obj = Args.Cchar.Cchar()
  counter.describeTest('obj = Args.Cchar.Cchar()')
  obj = Args.Cchar.Cchar()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == "3"')
  counter.evalTest(obj.returnback() == "3")

  counter.describeTest('obj.passin("3")')
  counter.evalTest(obj.passin("3"))

  counter.describeTest('(1, "3") == obj.passout()')
  counter.evalTest((1, "3") == obj.passout())

  counter.describeTest('(1, "a") == obj.passinout("A")')
  counter.evalTest((1, "a") == obj.passinout("A"))

  counter.describeTest('("3", "3", "A") = obj.passeverywhere("3", "a")')
  counter.evalTest(("3", "3", "A") == obj.passeverywhere("3", "a"))
  
  # int test
  obj = Args.Cint.Cint()
  counter.describeTest('obj = Args.Cint.Cint()')
  obj = Args.Cint.Cint()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3')
  counter.evalTest(obj.returnback() == 3)

  counter.describeTest('obj.passin(3)')
  counter.evalTest(obj.passin(3))

  counter.describeTest('(1, 3) == obj.passout()')
  counter.evalTest((1, 3) == obj.passout())

  counter.describeTest('(1, -3) == obj.passinout(3)')
  counter.evalTest((1, -3) == obj.passinout(3))

  counter.describeTest('(3, 3, 3) = obj.passeverywhere(3, -3)')
  counter.evalTest((3, 3, 3) == obj.passeverywhere(3, -3))

  # long test
  obj = Args.Clong.Clong()
  counter.describeTest('obj = Args.Clong.Clong()')
  obj = Args.Clong.Clong()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3L')
  counter.evalTest(obj.returnback() == 3L)

  counter.describeTest('obj.passin(3L)')
  counter.evalTest(obj.passin(3L))

  counter.describeTest('(1, 3L) == obj.passout()')
  counter.evalTest((1, 3L) == obj.passout())

  counter.describeTest('(1, -3L) == obj.passinout(3L)')
  counter.evalTest((1, -3L) == obj.passinout(3L))

  counter.describeTest('(3L, 3L, 3L) = obj.passeverywhere(3L, -3L)')
  counter.evalTest((3L, 3L, 3L) == obj.passeverywhere(3L, -3L))

  # float test
  floatpi = toFloat(3.1)
  obj = Args.Cfloat.Cfloat()
  counter.describeTest('obj = Args.Cfloat.Cfloat()')
  obj = Args.Cfloat.Cfloat()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3.1')
  counter.evalTest(obj.returnback() == floatpi)

  counter.describeTest('obj.passin(3.1)')
  counter.evalTest(obj.passin(floatpi))

  counter.describeTest('(1, 3.1) == obj.passout()')
  counter.evalTest((1, floatpi) == obj.passout())

  counter.describeTest('(1, -3.1) == obj.passinout(3.1)')
  counter.evalTest((1, -floatpi) == obj.passinout(floatpi))

  counter.describeTest('(3.1, 3.1, 3.1) = obj.passeverywhere(3.1, -3.1)')
  counter.evalTest((floatpi, floatpi, floatpi) == obj.passeverywhere(floatpi, -floatpi))

  # double test
  doublepi = 3.14
  obj = Args.Cdouble.Cdouble()
  counter.describeTest('obj = Args.Cdouble.Cdouble()')
  obj = Args.Cdouble.Cdouble()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3.14')
  counter.evalTest(obj.returnback() == doublepi)

  counter.describeTest('obj.passin(3.14)')
  counter.evalTest(obj.passin(doublepi))

  counter.describeTest('(1, 3.14) == obj.passout()')
  counter.evalTest((1, doublepi) == obj.passout())

  counter.describeTest('(1, -3.14) == obj.passinout(3.14)')
  counter.evalTest((1, -doublepi) == obj.passinout(doublepi))

  counter.describeTest('(3.14, 3.14, 3.14) = obj.passeverywhere(3.14, -3.14)')
  counter.evalTest((doublepi, doublepi, doublepi) == obj.passeverywhere(doublepi, -doublepi))

  # fcomplex test
  fcomplexpi = floatpi + floatpi * 1.0j
  fconj = floatpi - floatpi * 1.0j
  obj = Args.Cfcomplex.Cfcomplex()
  counter.describeTest('obj = Args.Cfcomplex.Cfcomplex()')
  obj = Args.Cfcomplex.Cfcomplex()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3.1 + 3.1i')
  counter.evalTest(obj.returnback() == fcomplexpi)

  counter.describeTest('obj.passin(3.1 + 3.1i)')
  counter.evalTest(obj.passin(fcomplexpi))

  counter.describeTest('(1, 3.1 + 3.1i) == obj.passout()')
  counter.evalTest((1, fcomplexpi) == obj.passout())

  counter.describeTest('(1, 3.1 - 3.1i) == obj.passinout(3.1 + 3.1i)')
  counter.evalTest((1, fconj) == obj.passinout(fcomplexpi))

  counter.describeTest('(3.1 + 3.1i, 3.1 + 3.1i, 3.1 + 3.1i) = obj.passeverywhere(3.1 + 3.1i, 3.1 - 3.1i)')
  counter.evalTest((fcomplexpi, fcomplexpi, fcomplexpi) == obj.passeverywhere(fcomplexpi, fconj))

  # dcomplex test
  dcomplexpi = doublepi + doublepi * 1.0j
  dconj = doublepi - doublepi * 1.0j
  obj = Args.Cdcomplex.Cdcomplex()
  counter.describeTest('obj = Args.Cdcomplex.Cdcomplex()')
  obj = Args.Cdcomplex.Cdcomplex()
  counter.evalTest(obj != None)

  counter.describeTest('obj.returnback() == 3.14 + 3.14i')
  counter.evalTest(obj.returnback() == dcomplexpi)

  counter.describeTest('obj.passin(3.14 + 3.14i)')
  counter.evalTest(obj.passin(dcomplexpi))

  counter.describeTest('(1, 3.14 + 3.14i) == obj.passout()')
  counter.evalTest((1, dcomplexpi) == obj.passout())

  counter.describeTest('(1, 3.14 - 3.14i) == obj.passinout(3.14 + 3.14i)')
  counter.evalTest((1, dconj) == obj.passinout(dcomplexpi))

  counter.describeTest('(3.14 + 3.14i, 3.14 + 3.14i, 3.14 + 3.14i) = obj.passeverywhere(3.14 + 3.14i, 3.14 - 3.14i)')
  counter.evalTest((dcomplexpi, dcomplexpi, dcomplexpi) == obj.passeverywhere(dcomplexpi, dconj))


  counter.finish()
0
