#
#   Copyright (c) 2000-2002
#   Joerg Walter, Mathias Koch
#
#   Permission to use, copy, modify, distribute and sell this software
#   and its documentation for any purpose is hereby granted without fee,
#   provided that the above copyright notice appear in all copies and
#   that both that copyright notice and this permission notice appear
#   in supporting documentation.  The authors make no representations
#   about the suitability of this software for any purpose.
#   It is provided "as is" without express or implied warranty.
#
#   The authors gratefully acknowledge the support of
#   GeNeSys mbH & Co. KG in producing this work.
#

subproject libs/numeric/ublas/test ;
# bring in rules for testing
import testing ;

# Define features to test:
#  Value types: USE_FLOAT USE_DOUBLE USE_STD_COMPLEX
#  Proxies: USE_RANGE USE_SLICE
#  Storage types: USE_BOUNDED_ARRAY USE_UNBOUNDED_ARRAY
#  Vector types: USE_STD_VECTOR USE_BOUNDED_VECTOR
#  Matrix types: USE_MATRIX USE_BOUNDED_MATRIX USE_VECTOR_OF_VECTOR
#  Adaptors: USE_ADAPTOR

UBLAS_TESTSET ?=
            USE_DOUBLE USE_STD_COMPLEX
            USE_RANGE USE_SLICE
            USE_UNBOUNDED_ARRAY USE_BOUNDED_VECTOR USE_MATRIX ;

#  Sparse storage: USE_MAP_ARRAY USE_STD_MAP
#  Sparse vectors: USE_MAPPED_VECTOR USE_COMPRESSED_VECTOR USE_COORDINATE_VECTOR
#  Sparse matrices: USE_MAPPED_MATRIX USE_COMPRESSED_MATRIX USE_COORDINATE_MATRIX USE_MAPPED_VECTOR_OF_MAPPED_VECTOR USE_GENERALIZED_VECTOR_OF_VECTOR

UBLAS_TESTSET_SPARSE ?= 
            USE_DOUBLE USE_STD_COMPLEX
#            USE_RANGE USE_SLICE    Too complex for regression testing
            USE_UNBOUNDED_ARRAY
            USE_STD_MAP
            USE_MAPPED_VECTOR USE_COMPRESSED_VECTOR USE_COORDINATE_VECTOR
            USE_MAPPED_MATRIX USE_COMPRESSED_MATRIX USE_COORDINATE_MATRIX ;


test-suite numeric/uBLAS
    : [ run test1/test1.cpp
            test1/test11.cpp
            test1/test12.cpp
            test1/test13.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET)
            <intel-linux><*><cxxflags>"-fpstkchk"    # Try and pick up runtime failures
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
            [ cond [ is-subset Darwin : $(JAMUNAME) ] : <gcc><*><cxxflags>"-fabi-version=0" ] ]
      [ run test2/test2.cpp
            test2/test21.cpp
            test2/test22.cpp
            test2/test23.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET)
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
      [ run test3/test3.cpp
            test3/test31.cpp
            test3/test32.cpp
            test3/test33.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET_SPARSE)
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
      [ run test4/test4.cpp
            test4/test42.cpp
            test4/test43.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET)
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
      [ run test5/test5.cpp
            test5/test52.cpp
            test5/test53.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET)
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
      [ run test6/test6.cpp
            test6/test62.cpp
            test6/test63.cpp
        : # args
        : # input files
        : # requirements
            <define>$(UBLAS_TESTSET)
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
# Test7 checks uBLAS operation with interval types.
# This causes too much compiler badness. Issues need to be addressed for VC7.1 VC8 CW9 and Intel 8 (windows)
#      [ run test7/test7.cpp
#            test7/test71.cpp
#            test7/test72.cpp
#            test7/test73.cpp
#        : # args
#        : # input files
#        : # requirements
#            <define>BOOST_UBLAS_USE_INTERVAL
#            <define>$(UBLAS_TESTSET)
#            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
#      ]

      [ run placement_new.cpp
      ]
      [ compile concepts.cpp
        : # requirements
            <define>EXTERNAL
            <intel-linux><*><cxxflags>"-Xc"
            <vacpp><*><define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
      ]
    ;
