x
Yes
No
Do you want to visit DriveHQ English website?
Inicio
Características
Precios
Prueba gratuita
Software cliente
Acerca de nosotros
Servidor de archivos
|
Solución de copias de seguridad
|
Servidor FTP
|
Servidor de correo electrónico
|
Alojamiento web
|
Software cliente
Servidor de archivos
Solución de copia de seguridad
Servidor FTP
Servidor de correo electrónico
Alojamiento web
Software cliente
new_iterator_tests.hpp - Hosted on DriveHQ Cloud IT Platform
Arriba
Subir
Descargar
Compartir
Publicar
Nueva carpeta
Nuevo archivo
Copiar
Cortar
Eliminar
Pegar
Clasificación
Actualizar
Ruta de la carpeta: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\iterator\new_iterator_tests.hpp
Girar
Efecto
Propiedad
Historial
#ifndef BOOST_NEW_ITERATOR_TESTS_HPP # define BOOST_NEW_ITERATOR_TESTS_HPP // // Copyright (c) David Abrahams 2001. // Copyright (c) Jeremy Siek 2001-2003. // Copyright (c) Thomas Witt 2002. // // Use, modification and distribution is subject to the // Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // This is meant to be the beginnings of a comprehensive, generic // test suite for STL concepts such as iterators and containers. // // Revision History: // 28 Oct 2002 Started update for new iterator categories // (Jeremy Siek) // 28 Apr 2002 Fixed input iterator requirements. // For a == b a++ == b++ is no longer required. // See 24.1.1/3 for details. // (Thomas Witt) // 08 Feb 2001 Fixed bidirectional iterator test so that // --i is no longer a precondition. // (Jeremy Siek) // 04 Feb 2001 Added lvalue test, corrected preconditions // (David Abrahams) # include
# include
# include
# include
// for detail::dummy_constructor # include
# include
# include
# include
# include
# include
# include
namespace boost { // Do separate tests for *i++ so we can treat, e.g., smart pointers, // as readable and/or writable iterators. template
void readable_iterator_traversal_test(Iterator i1, T v, mpl::true_) { T v2(*i1++); BOOST_TEST(v == v2); } template
void readable_iterator_traversal_test(const Iterator i1, T v, mpl::false_) {} template
void writable_iterator_traversal_test(Iterator i1, T v, mpl::true_) { ++i1; // we just wrote into that position *i1++ = v; Iterator x(i1++); (void)x; } template
void writable_iterator_traversal_test(const Iterator i1, T v, mpl::false_) {} // Preconditions: *i == v template
void readable_iterator_test(const Iterator i1, T v) { Iterator i2(i1); // Copy Constructible typedef typename detail::iterator_traits
::reference ref_t; ref_t r1 = *i1; ref_t r2 = *i2; T v1 = r1; T v2 = r2; BOOST_TEST(v1 == v); BOOST_TEST(v2 == v); # if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) readable_iterator_traversal_test(i1, v, detail::is_postfix_incrementable
()); // I think we don't really need this as it checks the same things as // the above code. BOOST_STATIC_ASSERT(is_readable_iterator
::value); # endif } template
void writable_iterator_test(Iterator i, T v, T v2) { Iterator i2(i); // Copy Constructible *i2 = v; # if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) writable_iterator_traversal_test( i, v2, mpl::and_< detail::is_incrementable
, detail::is_postfix_incrementable
>()); # endif } template
void swappable_iterator_test(Iterator i, Iterator j) { Iterator i2(i), j2(j); typename detail::iterator_traits
::value_type bi = *i, bj = *j; iter_swap(i2, j2); typename detail::iterator_traits
::value_type ai = *i, aj = *j; BOOST_TEST(bi == aj && bj == ai); } template
void constant_lvalue_iterator_test(Iterator i, T v1) { Iterator i2(i); typedef typename detail::iterator_traits
::value_type value_type; typedef typename detail::iterator_traits
::reference reference; BOOST_STATIC_ASSERT((is_same
::value)); const T& v2 = *i2; BOOST_TEST(v1 == v2); # ifndef BOOST_NO_LVALUE_RETURN_DETECTION BOOST_STATIC_ASSERT(is_lvalue_iterator
::value); BOOST_STATIC_ASSERT(!is_non_const_lvalue_iterator
::value); # endif } template
void non_const_lvalue_iterator_test(Iterator i, T v1, T v2) { Iterator i2(i); typedef typename detail::iterator_traits
::value_type value_type; typedef typename detail::iterator_traits
::reference reference; BOOST_STATIC_ASSERT((is_same
::value)); T& v3 = *i2; BOOST_TEST(v1 == v3); // A non-const lvalue iterator is not neccessarily writable, but we // are assuming the value_type is assignable here *i = v2; T& v4 = *i2; BOOST_TEST(v2 == v4); # ifndef BOOST_NO_LVALUE_RETURN_DETECTION BOOST_STATIC_ASSERT(is_lvalue_iterator
::value); BOOST_STATIC_ASSERT(is_non_const_lvalue_iterator
::value); # endif } template
void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2) { Iterator i2; Iterator i3(i); i2 = i; BOOST_TEST(i2 == i3); BOOST_TEST(i != j); BOOST_TEST(i2 != j); readable_iterator_test(i, val1); readable_iterator_test(i2, val1); readable_iterator_test(i3, val1); BOOST_TEST(i == i2++); BOOST_TEST(i != ++i3); readable_iterator_test(i2, val2); readable_iterator_test(i3, val2); readable_iterator_test(i, val1); } template
void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2) { forward_readable_iterator_test(i, j, val1, val2); Iterator i2 = i; ++i2; swappable_iterator_test(i, i2); } // bidirectional // Preconditions: *i == v1, *++i == v2 template
void bidirectional_readable_iterator_test(Iterator i, T v1, T v2) { Iterator j(i); ++j; forward_readable_iterator_test(i, j, v1, v2); ++i; Iterator i1 = i, i2 = i; BOOST_TEST(i == i1--); BOOST_TEST(i != --i2); readable_iterator_test(i, v2); readable_iterator_test(i1, v1); readable_iterator_test(i2, v1); --i; BOOST_TEST(i == i1); BOOST_TEST(i == i2); ++i1; ++i2; readable_iterator_test(i, v1); readable_iterator_test(i1, v2); readable_iterator_test(i2, v2); } // random access // Preconditions: [i,i+N) is a valid range template
void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals) { bidirectional_readable_iterator_test(i, vals[0], vals[1]); const Iterator j = i; int c; for (c = 0; c < N-1; ++c) { BOOST_TEST(i == j + c); BOOST_TEST(*i == vals[c]); typename detail::iterator_traits
::value_type x = j[c]; BOOST_TEST(*i == x); BOOST_TEST(*i == *(j + c)); BOOST_TEST(*i == *(c + j)); ++i; BOOST_TEST(i > j); BOOST_TEST(i >= j); BOOST_TEST(j <= i); BOOST_TEST(j < i); } Iterator k = j + N - 1; for (c = 0; c < N-1; ++c) { BOOST_TEST(i == k - c); BOOST_TEST(*i == vals[N - 1 - c]); typename detail::iterator_traits
::value_type x = j[N - 1 - c]; BOOST_TEST(*i == x); Iterator q = k - c; BOOST_TEST(*i == *q); BOOST_TEST(i > j); BOOST_TEST(i >= j); BOOST_TEST(j <= i); BOOST_TEST(j < i); --i; } } } // namespace boost # include
#endif // BOOST_NEW_ITERATOR_TESTS_HPP
new_iterator_tests.hpp
Dirección de la página
Dirección del archivo
Anterior
13/17
Siguiente
Descargar
( 7 KB )
Comments
Total ratings:
0
Average rating:
No clasificado
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.