Blame ImathTest/testBox.cpp

Packit 8dc392
///////////////////////////////////////////////////////////////////////////
Packit 8dc392
//
Packit 8dc392
// Copyright (c) 2010, Industrial Light & Magic, a division of Lucas
Packit 8dc392
// Digital Ltd. LLC
Packit 8dc392
// 
Packit 8dc392
// All rights reserved.
Packit 8dc392
// 
Packit 8dc392
// Redistribution and use in source and binary forms, with or without
Packit 8dc392
// modification, are permitted provided that the following conditions are
Packit 8dc392
// met:
Packit 8dc392
// *       Redistributions of source code must retain the above copyright
Packit 8dc392
// notice, this list of conditions and the following disclaimer.
Packit 8dc392
// *       Redistributions in binary form must reproduce the above
Packit 8dc392
// copyright notice, this list of conditions and the following disclaimer
Packit 8dc392
// in the documentation and/or other materials provided with the
Packit 8dc392
// distribution.
Packit 8dc392
// *       Neither the name of Industrial Light & Magic nor the names of
Packit 8dc392
// its contributors may be used to endorse or promote products derived
Packit 8dc392
// from this software without specific prior written permission. 
Packit 8dc392
// 
Packit 8dc392
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit 8dc392
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit 8dc392
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit 8dc392
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit 8dc392
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit 8dc392
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit 8dc392
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit 8dc392
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit 8dc392
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit 8dc392
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 8dc392
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 8dc392
//
Packit 8dc392
///////////////////////////////////////////////////////////////////////////
Packit 8dc392
Packit 8dc392
Packit 8dc392
#include <testBoxAlgo.h>
Packit 8dc392
#include "ImathBoxAlgo.h"
Packit 8dc392
#include "ImathRandom.h"
Packit 8dc392
#include <iostream>
Packit 8dc392
#include <algorithm>
Packit 8dc392
#include <assert.h>
Packit 8dc392
#include <typeinfo>
Packit 8dc392
#include <vector>
Packit 8dc392
Packit 8dc392
using namespace std;
Packit 8dc392
using namespace IMATH_INTERNAL_NAMESPACE;
Packit 8dc392
Packit 8dc392
namespace {
Packit 8dc392
Packit 8dc392
//
Packit 8dc392
// Test case generation utility - create a vector of IMATH_INTERNAL_NAMESPACE::Vec{2,3,4}
Packit 8dc392
// with all permutations of integers 1..T::dimensions().
Packit 8dc392
//
Packit 8dc392
// Algorithm from www.bearcave.com/random_hacks/permute.html
Packit 8dc392
//
Packit 8dc392
template <class T>
Packit 8dc392
static void
Packit 8dc392
addItem(const std::vector<int> &value, std::vector<T> &perms)
Packit 8dc392
{
Packit 8dc392
    T p;
Packit 8dc392
    for (unsigned int i = 0; i < value.size(); i++)
Packit 8dc392
    {
Packit 8dc392
        p[i] = value[i];
Packit 8dc392
    }
Packit 8dc392
    perms.push_back(p);
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
static void
Packit 8dc392
visit(int &level, int n, int k, std::vector<int> &value, std::vector<T> &perms)
Packit 8dc392
{
Packit 8dc392
    level = level + 1;
Packit 8dc392
    value[k] = level;
Packit 8dc392
Packit 8dc392
    if (level == n)
Packit 8dc392
        addItem(value, perms);
Packit 8dc392
    else
Packit 8dc392
        for (int i = 0; i < n; i++)
Packit 8dc392
            if (value[i] == 0)
Packit 8dc392
                visit(level, n, i, value, perms);
Packit 8dc392
Packit 8dc392
    level = level - 1;
Packit 8dc392
    value[k] = 0;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
static void
Packit 8dc392
permutations(std::vector<T> &perms)
Packit 8dc392
{
Packit 8dc392
    std::vector<int> value(T::dimensions());
Packit 8dc392
    int level = -1;
Packit 8dc392
    int n     = T::dimensions();
Packit 8dc392
Packit 8dc392
    visit(level, n, 0, value, perms);
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
static void
Packit 8dc392
testConstructors(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    constructors for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Empty
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(b.min == T(T::baseTypeMax()) &&
Packit 8dc392
               b.max == T(T::baseTypeMin()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Single point
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T p;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
            p[i] = i;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(p);
Packit 8dc392
        assert(b.min == p && b.max == p);
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Min and max
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T p0;
Packit 8dc392
        T p1;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            p0[i] = i;
Packit 8dc392
            p1[i] = 10 * T::dimensions() - i - 1;
Packit 8dc392
        }
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(p0, p1);
Packit 8dc392
        assert(b.min == p0 && b.max == p1);
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testMakeEmpty(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    makeEmpty() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Empty box
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.makeEmpty();
Packit 8dc392
        assert(b.min == T(T::baseTypeMax()) &&
Packit 8dc392
               b.max == T(T::baseTypeMin()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has volume
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(T(-1), T(1));
Packit 8dc392
        b.makeEmpty();
Packit 8dc392
        assert(b.min == T(T::baseTypeMax()) &&
Packit 8dc392
               b.max == T(T::baseTypeMin()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no volume
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max(0);
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
        b.makeEmpty();
Packit 8dc392
        assert(b.min == T(T::baseTypeMax()) &&
Packit 8dc392
               b.max == T(T::baseTypeMin()));
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testMakeInfinite(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    makeInfinite() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Infinite box
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.makeInfinite();
Packit 8dc392
        assert(b.min == T(T::baseTypeMin()) &&
Packit 8dc392
               b.max == T(T::baseTypeMax()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has volume
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(T(-1), T(1));
Packit 8dc392
        b.makeInfinite();
Packit 8dc392
        assert(b.min == T(T::baseTypeMin()) &&
Packit 8dc392
               b.max == T(T::baseTypeMax()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no volume
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max(0);
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
        b.makeInfinite();
Packit 8dc392
        assert(b.min == T(T::baseTypeMin()) &&
Packit 8dc392
               b.max == T(T::baseTypeMax()));
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testExtendByPoint(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    extendBy() point for type " << type << endl;
Packit 8dc392
Packit 8dc392
    IMATH_INTERNAL_NAMESPACE::Rand32 rand(0);
Packit 8dc392
Packit 8dc392
    const unsigned int iters = 10;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Extend empty box with a single point.
Packit 8dc392
    //
Packit 8dc392
    for (unsigned int i = 0; i < iters; i++)
Packit 8dc392
    {
Packit 8dc392
        T p;
Packit 8dc392
        for (unsigned int j = 0; j < T::dimensions(); j++)
Packit 8dc392
            p[j] = typename T::BaseType (rand.nextf(-12345, 12345));
Packit 8dc392
                              
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.extendBy(p);
Packit 8dc392
        assert(b.min == p && b.max == p);
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Extend empty box with a number of random points. Note that
Packit 8dc392
    // this also covers extending a non-empty box.
Packit 8dc392
    //
Packit 8dc392
    for (unsigned int i = 0; i < iters; i++)
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
Packit 8dc392
        T min;
Packit 8dc392
        T max;
Packit 8dc392
Packit 8dc392
        for (unsigned int j = 0; j < i; j++)
Packit 8dc392
        {
Packit 8dc392
            T p;
Packit 8dc392
            for (unsigned int k = 0; k < T::dimensions(); k++)
Packit 8dc392
                p[k] =  typename T::BaseType (rand.nextf(-12345, 12345));
Packit 8dc392
Packit 8dc392
            if (j == 0)
Packit 8dc392
            {
Packit 8dc392
                min = p;
Packit 8dc392
                max = p;
Packit 8dc392
            }
Packit 8dc392
            for (unsigned int k = 0; k < T::dimensions(); k++)
Packit 8dc392
            {
Packit 8dc392
                min[k] = std::min(min[k], p[k]);
Packit 8dc392
                max[k] = std::max(max[k], p[k]);
Packit 8dc392
            }
Packit 8dc392
Packit 8dc392
            b.extendBy(p);
Packit 8dc392
Packit 8dc392
            assert(b.min == min && b.max == max);
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testExtendByBox(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    extendBy() box for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Extend empty box with an empty box;
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.extendBy(IMATH_INTERNAL_NAMESPACE::Box<T>());
Packit 8dc392
        assert(b.min == T(T::baseTypeMax()) &&
Packit 8dc392
               b.max == T(T::baseTypeMin()));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Extend empty box with a non-empty box and vice versa.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        std::vector<T> perms;
Packit 8dc392
        permutations(perms);
Packit 8dc392
Packit 8dc392
        for (unsigned int i = 0; i < perms.size(); i++)
Packit 8dc392
        {
Packit 8dc392
            for (unsigned int j = 0; j < perms.size(); j++)
Packit 8dc392
            {
Packit 8dc392
                T p0 = -perms[i];
Packit 8dc392
                T p1 =  perms[j];
Packit 8dc392
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
                b0.extendBy(IMATH_INTERNAL_NAMESPACE::Box<T>(p0, p1));
Packit 8dc392
                assert(b0.min == p0 && b0.max == p1);
Packit 8dc392
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
                b1.extendBy(IMATH_INTERNAL_NAMESPACE::Box<T>());
Packit 8dc392
                assert(b1.min == p0 && b1.max == p1);
Packit 8dc392
            }
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
        
Packit 8dc392
    //
Packit 8dc392
    // Extend non-empty box with non-empty box. Starts with empty, then builds.
Packit 8dc392
    //
Packit 8dc392
    IMATH_INTERNAL_NAMESPACE::Rand32 rand(0);
Packit 8dc392
    const unsigned int iters = 10;
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
Packit 8dc392
        T min, max;
Packit 8dc392
Packit 8dc392
        for (unsigned int i = 1; i < iters; i++)
Packit 8dc392
        {
Packit 8dc392
            T p0;
Packit 8dc392
            T p1;
Packit 8dc392
            for (unsigned int k = 0; k < T::dimensions(); k++)
Packit 8dc392
            {
Packit 8dc392
                p0[k] = typename T::BaseType (rand.nextf(   0,  999));
Packit 8dc392
                p1[k] = typename T::BaseType (rand.nextf(1000, 1999));
Packit 8dc392
            }
Packit 8dc392
Packit 8dc392
            min = b.min;
Packit 8dc392
            max = b.max;
Packit 8dc392
            for (unsigned int k = 0; k < T::dimensions(); k++)
Packit 8dc392
            {
Packit 8dc392
                min[k] = std::min(min[k], p0[k]);
Packit 8dc392
                max[k] = std::max(max[k], p1[k]);
Packit 8dc392
            }
Packit 8dc392
            b.extendBy(IMATH_INTERNAL_NAMESPACE::Box<T>(p0, p1));
Packit 8dc392
Packit 8dc392
            assert(b.min == min && b.max == max);
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testComparators(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    comparators for type " << type << endl;
Packit 8dc392
Packit 8dc392
    IMATH_INTERNAL_NAMESPACE::Rand32 rand(0);
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Compare empty.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1;
Packit 8dc392
Packit 8dc392
        assert(b0 == b1);
Packit 8dc392
        assert(!(b0 != b1));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Compare empty to non-empty.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        std::vector<T> perms;
Packit 8dc392
        permutations(perms);
Packit 8dc392
Packit 8dc392
        for (unsigned int i = 0; i < perms.size(); i++)
Packit 8dc392
        {
Packit 8dc392
            for (unsigned int j = 0; j < perms.size(); j++)
Packit 8dc392
            {
Packit 8dc392
                T p0 = -perms[i];
Packit 8dc392
                T p1 =  perms[j];
Packit 8dc392
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
                assert(!(b0 == b1));
Packit 8dc392
                assert(b0 != b1);
Packit 8dc392
            }
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Compare two non-empty
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        std::vector<T> perms;
Packit 8dc392
        permutations(perms);
Packit 8dc392
Packit 8dc392
        for (unsigned int i = 0; i < perms.size(); i++)
Packit 8dc392
        {
Packit 8dc392
            for (unsigned int j = 0; j < perms.size(); j++)
Packit 8dc392
            {
Packit 8dc392
                T p0 = -perms[i];
Packit 8dc392
                T p1 =  perms[j];
Packit 8dc392
Packit 8dc392
                T p2 = -perms[j];
Packit 8dc392
                T p3 =  perms[i];
Packit 8dc392
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b0(p0, p1);
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b1(p2, p3);
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b2(p0, p1);
Packit 8dc392
Packit 8dc392
                if (i == j)
Packit 8dc392
                {
Packit 8dc392
                    assert(b0 == b1);
Packit 8dc392
                    assert(!(b0 != b1));
Packit 8dc392
                }
Packit 8dc392
                else
Packit 8dc392
                {
Packit 8dc392
                    assert(b0 != b1);
Packit 8dc392
                    assert(!(b0 == b1));
Packit 8dc392
                }
Packit 8dc392
                assert(b0 == b2);
Packit 8dc392
                assert(!(b0 != b2));
Packit 8dc392
            }
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testIntersects(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    intersects() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    IMATH_INTERNAL_NAMESPACE::Rand32 rand(0);
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect point with empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        T             p(1);
Packit 8dc392
Packit 8dc392
        assert(!b.intersects(p));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect point with non-empty, has-volume box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(T(-1), T(1));
Packit 8dc392
        T             p0(0);
Packit 8dc392
        T             p1(5);
Packit 8dc392
        T             p2(-5);
Packit 8dc392
Packit 8dc392
        assert(b.intersects(p0));
Packit 8dc392
        assert(!b.intersects(p1));
Packit 8dc392
        assert(!b.intersects(p2));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect point with non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        T p0(0);
Packit 8dc392
        T p1(5);
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(b.intersects(p0));
Packit 8dc392
        assert(!b.intersects(p1));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect empty box with empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1;
Packit 8dc392
Packit 8dc392
        assert(!b0.intersects(b1));
Packit 8dc392
        assert(!b1.intersects(b0));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect empty box with non-empty has-volume boxes.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(T(-1), T(1));
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b2(T( 1), T(2));
Packit 8dc392
Packit 8dc392
        assert(!b0.intersects(b1));
Packit 8dc392
        assert(!b0.intersects(b2));
Packit 8dc392
Packit 8dc392
        assert(!b1.intersects(b0));
Packit 8dc392
        assert(!b2.intersects(b0));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect empty box with non-empty no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0;
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(min, max);
Packit 8dc392
Packit 8dc392
        assert(!b0.intersects(b1));
Packit 8dc392
        assert(!b1.intersects(b0));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect non-empty has-volume box with non-empty has-volume box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(T(-1), T(1));
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b2(T(-1), T(1));
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b3(T( 1), T(2));
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b4(T( 2), T(3));
Packit 8dc392
Packit 8dc392
        assert(b1.intersects(b1));
Packit 8dc392
        assert(b1.intersects(b3));
Packit 8dc392
        assert(!b1.intersects(b4));
Packit 8dc392
Packit 8dc392
        assert(b3.intersects(b1));
Packit 8dc392
        assert(!b4.intersects(b1));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect non-empty has-volume box with non-empty no-volume box.
Packit 8dc392
    //
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(min, max);
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b2(min + T(2), max + T(2));
Packit 8dc392
        
Packit 8dc392
        assert(b0.intersects(b1));
Packit 8dc392
        assert(b1.intersects(b0));
Packit 8dc392
Packit 8dc392
        assert(!b0.intersects(b2));
Packit 8dc392
        assert(!b2.intersects(b1));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Intersect non-empty no-volume box with non-empty no-volume box.
Packit 8dc392
    //
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(min, max);
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(min,  max + T(2));
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b2(min + T(2),  max + T(2));
Packit 8dc392
        
Packit 8dc392
        assert(b0.intersects(b1));
Packit 8dc392
        assert(b1.intersects(b0));
Packit 8dc392
Packit 8dc392
        assert(!b0.intersects(b2));
Packit 8dc392
        assert(!b2.intersects(b0));
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testSize(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    size() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Size of empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(b.size() == T(0));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Size of non-empty, has-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(-1, -1),         (1, 1)       ]
Packit 8dc392
    //    3D: [(-1, -1, -1),     (1, 1, 1)    ]
Packit 8dc392
    //    4D: [(-1, -1, -1, -1), (1, 1, 1, 1) ] 
Packit 8dc392
    //
Packit 8dc392
    // and
Packit 8dc392
    //
Packit 8dc392
    //    2D: [(-1, -2),         (1, 2)       ]
Packit 8dc392
    //    3D: [(-1, -2, -3),     (1, 2, 3)    ]
Packit 8dc392
    //    4D: [(-1, -2, -3, -4), (1, 2, 3, 4) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
        assert(b0.size() == T(2));
Packit 8dc392
Packit 8dc392
        T p;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            p[i] = i;
Packit 8dc392
        }
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(-p, p);
Packit 8dc392
        assert(b1.size() == p * T(2));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Size of non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 1)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 1)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 1)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 1;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(b.size() == max);
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testCenter(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    center() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Center of empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(b.center() == T(0));
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Center of non-empty, has-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(-1, -1),         (1, 1)       ]
Packit 8dc392
    //    3D: [(-1, -1, -1),     (1, 1, 1)    ]
Packit 8dc392
    //    4D: [(-1, -1, -1, -1), (1, 1, 1, 1) ] 
Packit 8dc392
    //
Packit 8dc392
    // and
Packit 8dc392
    //
Packit 8dc392
    //    2D: [(-2, -4),         ( 8,  2)       ]
Packit 8dc392
    //    3D: [(-2, -4, -6),     (12,  8, 2)    ]
Packit 8dc392
    //    4D: [(-2, -4, -6, -8), (16, 12, 8, 4) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
        assert(b0.center() == T(0));
Packit 8dc392
Packit 8dc392
        T p0;
Packit 8dc392
        T p1;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            p0[i] = -typename T::BaseType(1 << (i + 1));
Packit 8dc392
            p1[i] =  typename T::BaseType(1 << (T::dimensions() - i));
Packit 8dc392
        }
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
        assert(b1.center() == (p1 + p0) / 2);
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Center of non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 2)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 2)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 2)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 2;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(b.center() == max /2);
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testIsEmpty(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    isEmpty() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(b.isEmpty());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has-volume box.
Packit 8dc392
    //    2D: [(-2, -4),         ( 8,  2)       ]
Packit 8dc392
    //    3D: [(-2, -4, -6),     (12,  8, 2)    ]
Packit 8dc392
    //    4D: [(-2, -4, -6, -8), (16, 12, 8, 4) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
        assert(!b0.isEmpty());
Packit 8dc392
Packit 8dc392
        T p0;
Packit 8dc392
        T p1;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
           p0[i] = -typename T::BaseType(1 << (i + 1));
Packit 8dc392
           p1[i] =  typename T::BaseType(1 << (T::dimensions() - i));
Packit 8dc392
        }
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
        assert(!b1.isEmpty());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 2)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 2)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 2)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 2;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(!b.isEmpty());
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testIsInfinite(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    isInfinite() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Infinite box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.makeInfinite();
Packit 8dc392
        assert(b.isInfinite());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has-volume box.
Packit 8dc392
    //    2D: [(-2, -4),         ( 8,  2)       ]
Packit 8dc392
    //    3D: [(-2, -4, -6),     (12,  8, 2)    ]
Packit 8dc392
    //    4D: [(-2, -4, -6, -8), (16, 12, 8, 4) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
        assert(!b0.isInfinite());
Packit 8dc392
Packit 8dc392
        T p0;
Packit 8dc392
        T p1;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            p0[i] = -typename T::BaseType(1 << (i + 1));
Packit 8dc392
            p1[i] =  typename T::BaseType(1 << (T::dimensions() - i));
Packit 8dc392
        }
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
        assert(!b1.isInfinite());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 2)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 2)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 2)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 2;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(!b.isInfinite());
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testHasVolume(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    hasVolume() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(!b.hasVolume());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Infinite box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        b.makeInfinite();
Packit 8dc392
        assert(b.hasVolume());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has-volume box.
Packit 8dc392
    //    2D: [(-2, -4),         ( 8,  2)       ]
Packit 8dc392
    //    3D: [(-2, -4, -6),     (12,  8, 2)    ]
Packit 8dc392
    //    4D: [(-2, -4, -6, -8), (16, 12, 8, 4) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b0(T(-1), T(1));
Packit 8dc392
        assert(b0.hasVolume());
Packit 8dc392
Packit 8dc392
        T p0;
Packit 8dc392
        T p1;
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            p0[i] = -typename T::BaseType(1 << (i + 1));
Packit 8dc392
            p1[i] =  typename T::BaseType(1 << (T::dimensions() - i));
Packit 8dc392
        }
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b1(p0, p1);
Packit 8dc392
        assert(b1.hasVolume());
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0),       (0, 2)      ]
Packit 8dc392
    //    3D: [(0, 0, 0),    (0, 0, 2)   ]
Packit 8dc392
    //    4D: [(0, 0, 0, 0), (0, 0, 0, 2)]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        T min(0);
Packit 8dc392
        T max = min;
Packit 8dc392
        max[T::dimensions() - 1] = 2;
Packit 8dc392
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b(min, max);
Packit 8dc392
Packit 8dc392
        assert(!b.hasVolume());
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
template <class T>
Packit 8dc392
void
Packit 8dc392
testMajorAxis(const char *type)
Packit 8dc392
{
Packit 8dc392
    cout << "    majorAxis() for type " << type << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Empty box.
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        IMATH_INTERNAL_NAMESPACE::Box<T> b;
Packit 8dc392
        assert(b.majorAxis() == 0);
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, has-volume box.
Packit 8dc392
    // Boxes are [ (0, 0, ...), (<all permutations of 1..T::dimensions()>) ]
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        std::vector<T> perms;
Packit 8dc392
        permutations(perms);
Packit 8dc392
Packit 8dc392
        for (unsigned int i = 0; i < perms.size(); i++)
Packit 8dc392
        {
Packit 8dc392
            IMATH_INTERNAL_NAMESPACE::Box<T> b(T(0), perms[i]);
Packit 8dc392
Packit 8dc392
            unsigned int major = 0;
Packit 8dc392
            T size = perms[i] - T(0);
Packit 8dc392
            for (unsigned int j = 1; j < T::dimensions(); j++)
Packit 8dc392
                if (size[j] > size[major])
Packit 8dc392
                    major = j;
Packit 8dc392
                    
Packit 8dc392
            assert(b.majorAxis() == major);
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Non-empty, no-volume box.
Packit 8dc392
    // Boxes are:
Packit 8dc392
    //    2D: [(0, 0), (1, 0) ]
Packit 8dc392
    //    2D: [(0, 0), (0, 1) ]
Packit 8dc392
    //
Packit 8dc392
    //    3D: [(0, 0), (1, 0, 0) ]
Packit 8dc392
    //    3D: [(0, 0), (0, 1, 0) ]
Packit 8dc392
    //    3D: [(0, 0), (0, 0, 1) ]
Packit 8dc392
    //
Packit 8dc392
    //    and similarly for 4D
Packit 8dc392
    //
Packit 8dc392
    {
Packit 8dc392
        for (unsigned int i = 0; i < T::dimensions(); i++)
Packit 8dc392
        {
Packit 8dc392
            for (unsigned int j = 0; j < T::dimensions(); j++)
Packit 8dc392
            {
Packit 8dc392
                T max(0);
Packit 8dc392
                max[j] = 1;
Packit 8dc392
Packit 8dc392
                IMATH_INTERNAL_NAMESPACE::Box<T> b(T(0), max);
Packit 8dc392
                assert(b.majorAxis() == j);
Packit 8dc392
            }
Packit 8dc392
        }
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
} // anonymous namespace
Packit 8dc392
Packit 8dc392
Packit 8dc392
void
Packit 8dc392
testBox()
Packit 8dc392
{
Packit 8dc392
    cout << "Testing box methods" << endl;
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Constructors
Packit 8dc392
    //
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testConstructors<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // makeEmpty()
Packit 8dc392
    //
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testMakeEmpty<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // makeInfinite()
Packit 8dc392
    //
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testMakeInfinite<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // extendBy() (point)
Packit 8dc392
    //
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testExtendByPoint<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // extendBy() box
Packit 8dc392
    //
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testExtendByBox<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // == and !==
Packit 8dc392
    //
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testComparators<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // size()
Packit 8dc392
    //
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testSize<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // center()
Packit 8dc392
    //
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testCenter<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // isEmpty()
Packit 8dc392
    //
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testIsEmpty<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // isInfinite()
Packit 8dc392
    //
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testIsInfinite<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // hasVolume()
Packit 8dc392
    //
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testHasVolume<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // majorAxis()
Packit 8dc392
    //
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V2s>("V2s");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V2i>("V2i");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V2f>("V2f");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V2d>("V2d");
Packit 8dc392
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V3s>("V3s");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V3i>("V3i");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V3f>("V3f");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V3d>("V3d");
Packit 8dc392
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V4s>("V4s");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V4i>("V4i");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V4f>("V4f");
Packit 8dc392
    testMajorAxis<IMATH_INTERNAL_NAMESPACE::V4d>("V4d");
Packit 8dc392
Packit 8dc392
    cout << "ok\n" << endl;
Packit 8dc392
}