Skip to content

Commit beb46e2

Browse files
committed
PathMatcher Test : Demonstrate potential issue with find & Iterators.
1 parent d53e845 commit beb46e2

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed

test/IECore/IECoreTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ IECORE_POP_DEFAULT_VISIBILITY
6565
#include "CompoundDataTest.h"
6666
#include "CompoundObjectTest.h"
6767
#include "ComputationCacheTest.h"
68+
#include "PathMatcherTest.h"
6869

6970
using namespace boost::unit_test;
7071

@@ -99,6 +100,7 @@ bool init()
99100
addCompoundDataTest(test);
100101
addCompoundObjectTest(test);
101102
addComputationCacheTest(test);
103+
addPathMatcherTest(test);
102104
}
103105
catch (std::exception &ex)
104106
{

test/IECore/PathMatcherTest.cpp

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
//////////////////////////////////////////////////////////////////////////
2+
//
3+
// Copyright (c) 2018, Image Engine Design Inc. All rights reserved.
4+
//
5+
// Redistribution and use in source and binary forms, with or without
6+
// modification, are permitted provided that the following conditions are
7+
// met:
8+
//
9+
// * Redistributions of source code must retain the above copyright
10+
// notice, this list of conditions and the following disclaimer.
11+
//
12+
// * Redistributions in binary form must reproduce the above copyright
13+
// notice, this list of conditions and the following disclaimer in the
14+
// documentation and/or other materials provided with the distribution.
15+
//
16+
// * Neither the name of Image Engine Design nor the names of any
17+
// other contributors to this software may be used to endorse or
18+
// promote products derived from this software without specific prior
19+
// written permission.
20+
//
21+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22+
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23+
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24+
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25+
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26+
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27+
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28+
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29+
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30+
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31+
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
//
33+
//////////////////////////////////////////////////////////////////////////
34+
35+
36+
#include <IECoreScene/SceneInterface.h>
37+
#include "PathMatcherTest.h"
38+
39+
#include "IECoreScene/SceneInterface.h"
40+
41+
#include "IECore/PathMatcher.h"
42+
43+
namespace IECore
44+
{
45+
46+
struct PathMatcherTest
47+
{
48+
void testPathMatcherIterator()
49+
{
50+
IECore::PathMatcher pathMatcher;
51+
52+
pathMatcher.addPath("/a/b/c");
53+
pathMatcher.addPath("/a/b/c/d/e/f");
54+
pathMatcher.addPath("/a/b/c/d/g/h");
55+
56+
BOOST_CHECK( pathMatcher.find({ IECore::InternedString( "a" ) } ) != pathMatcher.end() );
57+
BOOST_CHECK( pathMatcher.find({ IECore::InternedString( "a" ), IECore::InternedString( "b" ) } ) != pathMatcher.end() );
58+
BOOST_CHECK( pathMatcher.find({ IECore::InternedString( "a" ), IECore::InternedString( "b" ), IECore::InternedString( "c" ) } ) != pathMatcher.end() );
59+
60+
IECore::RawIterator x = pathMatcher.find( { IECore::InternedString( "a" ), IECore::InternedString( "b" ), IECore::InternedString( "c" ), IECore::InternedString( "d" ) } );
61+
62+
// Finds the next terminal node
63+
IECore::Iterator y = IECore::PathMatcher::Iterator( x );
64+
65+
// This check to see if the path we're querying has been explicitly added.
66+
BOOST_CHECK( myIt != x);
67+
}
68+
};
69+
70+
struct PathMatcherTestSuite : public boost::unit_test::test_suite
71+
{
72+
73+
PathMatcherTestSuite() : boost::unit_test::test_suite( "PathMatcherTestSuite" )
74+
{
75+
boost::shared_ptr<PathMatcherTest> instance( new PathMatcherTest() );
76+
add( BOOST_CLASS_TEST_CASE( &PathMatcherTest::testPathMatcherIterator, instance ) );
77+
}
78+
};
79+
80+
void addPathMatcherTest(boost::unit_test::test_suite* test)
81+
{
82+
test->add( new PathMatcherTestSuite() );
83+
}
84+
85+
} // IECore

test/IECore/PathMatcherTest.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//////////////////////////////////////////////////////////////////////////
2+
//
3+
// Copyright (c) 2018, Image Engine Design Inc. All rights reserved.
4+
//
5+
// Redistribution and use in source and binary forms, with or without
6+
// modification, are permitted provided that the following conditions are
7+
// met:
8+
//
9+
// * Redistributions of source code must retain the above copyright
10+
// notice, this list of conditions and the following disclaimer.
11+
//
12+
// * Redistributions in binary form must reproduce the above copyright
13+
// notice, this list of conditions and the following disclaimer in the
14+
// documentation and/or other materials provided with the distribution.
15+
//
16+
// * Neither the name of Image Engine Design nor the names of any
17+
// other contributors to this software may be used to endorse or
18+
// promote products derived from this software without specific prior
19+
// written permission.
20+
//
21+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22+
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23+
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24+
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25+
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26+
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27+
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28+
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29+
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30+
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31+
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
//
33+
//////////////////////////////////////////////////////////////////////////
34+
35+
#ifndef IECORE_PATHMATCHERTEST_H
36+
#define IECORE_PATHMATCHERTEST_H
37+
38+
#include "IECore/Export.h"
39+
40+
IECORE_PUSH_DEFAULT_VISIBILITY
41+
#include "boost/test/unit_test.hpp"
42+
IECORE_POP_DEFAULT_VISIBILITY
43+
44+
namespace IECore
45+
{
46+
47+
void addPathMatcherTest( boost::unit_test::test_suite *test );
48+
49+
}
50+
51+
52+
#endif // IECORE_PATHMATCHERTEST_H
53+

0 commit comments

Comments
 (0)