diff --git a/CHANGES.rst b/CHANGES.rst
index 500e178..624d87f 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -87,6 +87,16 @@
   subclass, enabling a simpler constructor call. See `issue 23
   <https://github.com/zopefoundation/zope.schema/issues/23>`_.
 
+- Add fields and interfaces representing Python's numeric tower. In
+  descending order of generality these are ``Number``, ``Complex``,
+  ``Real``, ``Rational`` and ``Integral``. The ``Int`` class extends
+  ``Integral``, the ``Float`` class extends ``Real``, and the
+  ``Decimal`` class extends ``Number``. See `issue 49
+  <https://github.com/zopefoundation/zope.schema/issues/49>`_.
+
+- Make ``Iterable`` and ``Container`` properly implement ``IIterable``
+  and ``IContainer``, respectively.
+
 4.5.0 (2017-07-10)
 ==================
 
diff --git a/docs/api.rst b/docs/api.rst
index a133111..284fae3 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -41,6 +41,12 @@ Strings
 Numbers
 -------
 
+.. autoclass:: zope.schema.interfaces.INumber
+.. autoclass:: zope.schema.interfaces.IComplex
+.. autoclass:: zope.schema.interfaces.IReal
+.. autoclass:: zope.schema.interfaces.IRational
+.. autoclass:: zope.schema.interfaces.IIntegral
+
 .. autoclass:: zope.schema.interfaces.IInt
 .. autoclass:: zope.schema.interfaces.IFloat
 .. autoclass:: zope.schema.interfaces.IDecimal
@@ -141,16 +147,9 @@ Fields
 .. autoclass:: zope.schema.Field
 .. autoclass:: zope.schema.Collection
 .. autoclass:: zope.schema._field.AbstractCollection
-.. autoclass:: zope.schema.ASCII
-   :no-show-inheritance:
-.. autoclass:: zope.schema.ASCIILine
-   :no-show-inheritance:
+
 .. autoclass:: zope.schema.Bool
    :no-show-inheritance:
-.. autoclass:: zope.schema.Bytes
-   :no-show-inheritance:
-.. autoclass:: zope.schema.BytesLine
-   :no-show-inheritance:
 .. autoclass:: zope.schema.Choice
    :no-show-inheritance:
 .. autoclass:: zope.schema.Container
@@ -159,20 +158,14 @@ Fields
    :no-show-inheritance:
 .. autoclass:: zope.schema.Datetime
    :no-show-inheritance:
-.. autoclass:: zope.schema.Decimal
-   :no-show-inheritance:
 .. autoclass:: zope.schema.Dict
 .. autoclass:: zope.schema.DottedName
    :no-show-inheritance:
 
-.. autoclass:: zope.schema.Float
-   :no-show-inheritance:
 .. autoclass:: zope.schema.FrozenSet
    :no-show-inheritance:
 .. autoclass:: zope.schema.Id
    :no-show-inheritance:
-.. autoclass:: zope.schema.Int
-   :no-show-inheritance:
 .. autoclass:: zope.schema.InterfaceField
    :no-show-inheritance:
 .. autoclass:: zope.schema.Iterable
@@ -192,12 +185,6 @@ Fields
    :no-show-inheritance:
 .. autoclass:: zope.schema.Set
 .. autoclass:: zope.schema.Sequence
-.. autoclass:: zope.schema.SourceText
-   :no-show-inheritance:
-.. autoclass:: zope.schema.Text
-   :no-show-inheritance:
-.. autoclass:: zope.schema.TextLine
-   :no-show-inheritance:
 .. autoclass:: zope.schema.Time
    :no-show-inheritance:
 .. autoclass:: zope.schema.Timedelta
@@ -206,6 +193,35 @@ Fields
 .. autoclass:: zope.schema.URI
    :no-show-inheritance:
 
+Strings
+-------
+.. autoclass:: zope.schema.ASCII
+   :no-show-inheritance:
+.. autoclass:: zope.schema.ASCIILine
+   :no-show-inheritance:
+.. autoclass:: zope.schema.Bytes
+   :no-show-inheritance:
+.. autoclass:: zope.schema.BytesLine
+   :no-show-inheritance:
+.. autoclass:: zope.schema.SourceText
+   :no-show-inheritance:
+.. autoclass:: zope.schema.Text
+   :no-show-inheritance:
+.. autoclass:: zope.schema.TextLine
+   :no-show-inheritance:
+
+Numbers
+-------
+.. autoclass:: zope.schema.Number
+.. autoclass:: zope.schema.Complex
+.. autoclass:: zope.schema.Real
+.. autoclass:: zope.schema.Rational
+.. autoclass:: zope.schema.Integral
+.. autoclass:: zope.schema.Float
+.. autoclass:: zope.schema.Int
+.. autoclass:: zope.schema.Decimal
+
+
 Accessors
 =========
 
diff --git a/src/zope/schema/__init__.py b/src/zope/schema/__init__.py
index 8fc6825..92300fd 100644
--- a/src/zope/schema/__init__.py
+++ b/src/zope/schema/__init__.py
@@ -21,6 +21,7 @@ from zope.schema._field import Bytes
 from zope.schema._field import BytesLine
 from zope.schema._field import Choice
 from zope.schema._field import Collection
+from zope.schema._field import Complex
 from zope.schema._field import Container
 from zope.schema._field import Date
 from zope.schema._field import Datetime
@@ -32,20 +33,24 @@ from zope.schema._field import Float
 from zope.schema._field import FrozenSet
 from zope.schema._field import Id
 from zope.schema._field import Int
+from zope.schema._field import Integral
 from zope.schema._field import InterfaceField
 from zope.schema._field import Iterable
 from zope.schema._field import List
 from zope.schema._field import Mapping
+from zope.schema._field import MinMaxLen
 from zope.schema._field import MutableMapping
 from zope.schema._field import MutableSequence
-from zope.schema._field import MinMaxLen
 from zope.schema._field import NativeString
 from zope.schema._field import NativeStringLine
+from zope.schema._field import Number
 from zope.schema._field import Object
 from zope.schema._field import Orderable
 from zope.schema._field import Password
-from zope.schema._field import Set
+from zope.schema._field import Rational
+from zope.schema._field import Real
 from zope.schema._field import Sequence
+from zope.schema._field import Set
 from zope.schema._field import SourceText
 from zope.schema._field import Text
 from zope.schema._field import TextLine
@@ -77,6 +82,7 @@ __all__ = [
     'BytesLine',
     'Choice',
     'Collection',
+    'Complex',
     'Container',
     'Date',
     'Datetime',
@@ -88,6 +94,7 @@ __all__ = [
     'FrozenSet',
     'Id',
     'Int',
+    'Integral',
     'InterfaceField',
     'Iterable',
     'List',
@@ -97,9 +104,12 @@ __all__ = [
     'MinMaxLen',
     'NativeString',
     'NativeStringLine',
+    'Number',
     'Object',
     'Orderable',
     'Password',
+    'Rational',
+    'Real',
     'Set',
     'Sequence',
     'SourceText',
diff --git a/src/zope/schema/_bootstrapfields.py b/src/zope/schema/_bootstrapfields.py
index 6d613b4..5904068 100644
--- a/src/zope/schema/_bootstrapfields.py
+++ b/src/zope/schema/_bootstrapfields.py
@@ -15,6 +15,11 @@
 """
 __docformat__ = 'restructuredtext'
 
+import decimal
+import fractions
+import numbers
+from math import isinf
+
 from zope.interface import Attribute
 from zope.interface import providedBy
 from zope.interface import implementer
@@ -359,21 +364,24 @@ class Text(MinMaxLen, Field):
 
     def fromUnicode(self, str):
         """
+        >>> from zope.schema.interfaces import WrongType
+        >>> from zope.schema.interfaces import ConstraintNotSatisfied
         >>> from zope.schema import Text
+        >>> from zope.schema._compat import text_type
         >>> t = Text(constraint=lambda v: 'x' in v)
-        >>> t.fromUnicode(b"foo x spam")
+        >>> t.fromUnicode(b"foo x spam") # doctest: +IGNORE_EXCEPTION_DETAIL
         Traceback (most recent call last):
         ...
-        WrongType: ('foo x spam', <type 'unicode'>, '')
+        zope.schema._bootstrapinterfaces.WrongType: ('foo x spam', <type 'unicode'>, '')
         >>> result = t.fromUnicode(u"foo x spam")
         >>> isinstance(result, bytes)
         False
         >>> str(result)
         'foo x spam'
-        >>> t.fromUnicode(u"foo spam")
+        >>> t.fromUnicode(u"foo spam") # doctest: +IGNORE_EXCEPTION_DETAIL
         Traceback (most recent call last):
         ...
-        ConstraintNotSatisfied: (u'foo spam', '')
+        zope.schema._bootstrapinterfaces.ConstraintNotSatisfied: (u'foo spam', '')
         """
         self.validate(str)
         return str
@@ -453,32 +461,197 @@ class Bool(Field):
         self.validate(v)
         return v
 
+class InvalidNumberLiteral(ValueError, ValidationError):
+    """Invalid number literal."""
+
+@implementer(IFromUnicode)
+class Number(Orderable, Field):
+    """
+    A field representing a :class:`numbers.Number` and implementing
+    :class:`zope.schema.interfaces.INumber`.
+
+    The :meth:`fromUnicode` method will attempt to use the smallest or
+    strictest possible type to represent incoming strings::
+
+        >>> from zope.schema._bootstrapfields import Number
+        >>> f = Number()
+        >>> f.fromUnicode("1")
+        1
+        >>> f.fromUnicode("125.6")
+        125.6
+        >>> f.fromUnicode("1+0j")
+        (1+0j)
+        >>> f.fromUnicode("1/2")
+        Fraction(1, 2)
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        Decimal('234...936')
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Decimal: 'not a number'
+
+    .. versionadded:: 4.6.0
+    """
+    _type = numbers.Number
+
+    # An ordered sequence of conversion routines. These should accept
+    # a string and produce an object that is an instance of `_type`, or raise
+    # a ValueError. The order should be most specific/strictest towards least
+    # restrictive (in other words, lowest in the numeric tower towards highest).
+    # We break this rule with fractions, though: a floating point number is
+    # more generally useful and expected than a fraction, so we attempt to parse
+    # as a float before a fraction.
+    _unicode_converters = (int, float, fractions.Fraction, complex, decimal.Decimal)
+
+    # The type of error we will raise if all conversions fail.
+    _validation_error = InvalidNumberLiteral
+
+    def fromUnicode(self, value):
+        last_exc = None
+        for converter in self._unicode_converters:
+            try:
+                val = converter(value)
+                if converter is float and isinf(val) and decimal.Decimal in self._unicode_converters:
+                    # Pass this on to decimal, if we're allowed
+                    val = decimal.Decimal(value)
+            except (ValueError, decimal.InvalidOperation) as e:
+                last_exc = e
+            else:
+                self.validate(val)
+                return val
+        try:
+            raise self._validation_error(*last_exc.args).with_field_and_value(self, value)
+        finally:
+            last_exc = None
+
+
+class Complex(Number):
+    """
+    A field representing a :class:`numbers.Complex` and implementing
+    :class:`zope.schema.interfaces.IComplex`.
+
+    The :meth:`fromUnicode` method is like that for :class:`Number`,
+    but doesn't allow Decimals::
+
+        >>> from zope.schema._bootstrapfields import Complex
+        >>> f = Complex()
+        >>> f.fromUnicode("1")
+        1
+        >>> f.fromUnicode("125.6")
+        125.6
+        >>> f.fromUnicode("1+0j")
+        (1+0j)
+        >>> f.fromUnicode("1/2")
+        Fraction(1, 2)
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        inf
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Decimal: 'not a number'
+
+    .. versionadded:: 4.6.0
+    """
+    _type = numbers.Complex
+    _unicode_converters = (int, float, complex, fractions.Fraction)
+
+
+class Real(Complex):
+    """
+    A field representing a :class:`numbers.Real` and implementing
+    :class:`zope.schema.interfaces.IReal`.
+
+    The :meth:`fromUnicode` method is like that for :class:`Complex`,
+    but doesn't allow Decimals or complex numbers::
+
+        >>> from zope.schema._bootstrapfields import Real
+        >>> f = Real()
+        >>> f.fromUnicode("1")
+        1
+        >>> f.fromUnicode("125.6")
+        125.6
+        >>> f.fromUnicode("1+0j") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Fraction: '1+0j'
+        >>> f.fromUnicode("1/2")
+        Fraction(1, 2)
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        inf
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Decimal: 'not a number'
+
+    .. versionadded:: 4.6.0
+    """
+    _type = numbers.Real
+    _unicode_converters = (int, float, fractions.Fraction)
+
+
+class Rational(Real):
+    """
+    A field representing a :class:`numbers.Rational` and implementing
+    :class:`zope.schema.interfaces.IRational`.
+
+    The :meth:`fromUnicode` method is like that for :class:`Real`,
+    but does not allow arbitrary floating point numbers::
+
+        >>> from zope.schema._bootstrapfields import Rational
+        >>> f = Rational()
+        >>> f.fromUnicode("1")
+        1
+        >>> f.fromUnicode("1/2")
+        Fraction(1, 2)
+        >>> f.fromUnicode("125.6")
+        Fraction(628, 5)
+        >>> f.fromUnicode("1+0j") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Fraction: '1+0j'
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        Fraction(777..., 330...)
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidNumberLiteral: Invalid literal for Decimal: 'not a number'
+
+    .. versionadded:: 4.6.0
+    """
+    _type = numbers.Rational
+    _unicode_converters = (int, fractions.Fraction)
+
+
 class InvalidIntLiteral(ValueError, ValidationError):
     """Invalid int literal."""
 
 
-@implementer(IFromUnicode)
-class Int(Orderable, Field):
-    """A field representing an Integer."""
-    _type = integer_types
+class Integral(Rational):
+    """
+    A field representing a :class:`numbers.Integral` and implementing
+    :class:`zope.schema.interfaces.IIntegral`.
 
-    def __init__(self, *args, **kw):
-        super(Int, self).__init__(*args, **kw)
+    The :meth:`fromUnicode` method only allows integral values::
 
-    def fromUnicode(self, str):
-        """
-        >>> from zope.schema._bootstrapfields import Int
-        >>> f = Int()
+        >>> from zope.schema._bootstrapfields import Integral
+        >>> f = Integral()
         >>> f.fromUnicode("125")
         125
         >>> f.fromUnicode("125.6") #doctest: +IGNORE_EXCEPTION_DETAIL
         Traceback (most recent call last):
         ...
         InvalidIntLiteral: invalid literal for int(): 125.6
-        """
-        try:
-            v = int(str)
-        except ValueError as v:
-            raise InvalidIntLiteral(*v.args).with_field_and_value(self, str)
-        self.validate(v)
-        return v
+
+    .. versionadded:: 4.6.0
+    """
+    _type = numbers.Integral
+    _unicode_converters = (int,)
+    _validation_error = InvalidIntLiteral
+
+
+class Int(Integral):
+    """A field representing a native integer type. and implementing
+    :class:`zope.schema.interfaces.IInt`.
+    """
+    _type = integer_types
+    _unicode_converters = (int,)
diff --git a/src/zope/schema/_field.py b/src/zope/schema/_field.py
index d80ee3c..5ec0d1b 100644
--- a/src/zope/schema/_field.py
+++ b/src/zope/schema/_field.py
@@ -46,6 +46,8 @@ from zope.schema.interfaces import IBytes
 from zope.schema.interfaces import IBytesLine
 from zope.schema.interfaces import IChoice
 from zope.schema.interfaces import ICollection
+from zope.schema.interfaces import IComplex
+from zope.schema.interfaces import IContainer
 from zope.schema.interfaces import IContextSourceBinder
 from zope.schema.interfaces import IDate
 from zope.schema.interfaces import IDatetime
@@ -57,7 +59,9 @@ from zope.schema.interfaces import IFloat
 from zope.schema.interfaces import IFromUnicode
 from zope.schema.interfaces import IFrozenSet
 from zope.schema.interfaces import IId
+from zope.schema.interfaces import IIterable
 from zope.schema.interfaces import IInt
+from zope.schema.interfaces import IIntegral
 from zope.schema.interfaces import IInterfaceField
 from zope.schema.interfaces import IList
 from zope.schema.interfaces import IMinMaxLen
@@ -65,7 +69,10 @@ from zope.schema.interfaces import IMapping
 from zope.schema.interfaces import IMutableMapping
 from zope.schema.interfaces import IMutableSequence
 from zope.schema.interfaces import IObject
+from zope.schema.interfaces import INumber
 from zope.schema.interfaces import IPassword
+from zope.schema.interfaces import IReal
+from zope.schema.interfaces import IRational
 from zope.schema.interfaces import ISet
 from zope.schema.interfaces import ISequence
 from zope.schema.interfaces import ISource
@@ -91,6 +98,7 @@ from zope.schema.interfaces import InvalidDottedName
 from zope.schema.interfaces import ConstraintNotSatisfied
 
 from zope.schema._bootstrapfields import Field
+from zope.schema._bootstrapfields import Complex
 from zope.schema._bootstrapfields import Container  # API import for __init__
 from zope.schema._bootstrapfields import Iterable
 from zope.schema._bootstrapfields import Orderable
@@ -98,7 +106,11 @@ from zope.schema._bootstrapfields import Text
 from zope.schema._bootstrapfields import TextLine
 from zope.schema._bootstrapfields import Bool
 from zope.schema._bootstrapfields import Int
+from zope.schema._bootstrapfields import Integral
+from zope.schema._bootstrapfields import Number
 from zope.schema._bootstrapfields import Password
+from zope.schema._bootstrapfields import Rational
+from zope.schema._bootstrapfields import Real
 from zope.schema._bootstrapfields import MinMaxLen
 from zope.schema._bootstrapfields import _NotGiven
 from zope.schema.fieldproperty import FieldProperty
@@ -113,9 +125,6 @@ from zope.schema._compat import binary_type
 from zope.schema._compat import PY3
 from zope.schema._compat import make_binary
 
-# pep 8 friendlyness
-Container
-
 # Fix up bootstrap field types
 Field.title = FieldProperty(IField['title'])
 Field.description = FieldProperty(IField['description'])
@@ -132,6 +141,14 @@ classImplements(TextLine, ITextLine)
 classImplements(Password, IPassword)
 classImplements(Bool, IBool)
 classImplements(Bool, IFromUnicode)
+classImplements(Iterable, IIterable)
+classImplements(Container, IContainer)
+
+classImplements(Number, INumber)
+classImplements(Complex, IComplex)
+classImplements(Real, IReal)
+classImplements(Rational, IRational)
+classImplements(Integral, IIntegral)
 classImplements(Int, IInt)
 
 
@@ -203,48 +220,80 @@ class InvalidFloatLiteral(ValueError, ValidationError):
 
 
 @implementer(IFloat, IFromUnicode)
-class Float(Orderable, Field):
-    __doc__ = IFloat.__doc__
+class Float(Real):
+    """
+    A field representing a native :class:`float` and implementing
+    :class:`zope.schema.interfaces.IFloat`.
+
+    The class :class:`zope.schema.Real` is a more general version,
+    accepting floats, integers, and fractions.
+
+    The :meth:`fromUnicode` method only accepts values that can be parsed
+    by the ``float`` constructor::
+
+        >>> from zope.schema._field import Float
+        >>> f = Float()
+        >>> f.fromUnicode("1")
+        1.0
+        >>> f.fromUnicode("125.6")
+        125.6
+        >>> f.fromUnicode("1+0j") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidFloatLiteral: Invalid literal for float(): 1+0j
+        >>> f.fromUnicode("1/2") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidFloatLiteral: invalid literal for float(): 1/2
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        inf
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidFloatLiteral: could not convert string to float: not a number
+    """
     _type = float
-
-    def __init__(self, *args, **kw):
-        super(Float, self).__init__(*args, **kw)
-
-    def fromUnicode(self, uc):
-        """ See IFromUnicode.
-        """
-        try:
-            v = float(uc)
-        except ValueError as v:
-            raise InvalidFloatLiteral(*v.args).with_field_and_value(self, uc)
-        self.validate(v)
-        return v
+    _unicode_converters = (float,)
+    _validation_error = InvalidFloatLiteral
 
 
 class InvalidDecimalLiteral(ValueError, ValidationError):
-
-    def __init__(self, literal):
-        super(InvalidDecimalLiteral, self).__init__(
-            "invalid literal for Decimal(): %s" % literal)
+    "Raised by decimal fields"
 
 
 @implementer(IDecimal, IFromUnicode)
-class Decimal(Orderable, Field):
-    __doc__ = IDecimal.__doc__
+class Decimal(Number):
+    """
+    A field representing a native :class:`decimal.Decimal` and implementing
+    :class:`zope.schema.interfaces.IDecimal`.
+
+    The :meth:`fromUnicode` method only accepts values that can be parsed
+    by the ``Decimal`` constructor::
+
+        >>> from zope.schema._field import Decimal
+        >>> f = Decimal()
+        >>> f.fromUnicode("1")
+        Decimal('1')
+        >>> f.fromUnicode("125.6")
+        Decimal('125.6')
+        >>> f.fromUnicode("1+0j") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidDecimalLiteral: Invalid literal for Decimal(): 1+0j
+        >>> f.fromUnicode("1/2") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidDecimalLiteral: Invalid literal for Decimal(): 1/2
+        >>> f.fromUnicode(str(2**31234) + '.' + str(2**256)) # doctest: +ELLIPSIS
+        Decimal('2349...936')
+        >>> f.fromUnicode("not a number") # doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ...
+        InvalidDecimalLiteral: could not convert string to float: not a number
+    """
     _type = decimal.Decimal
-
-    def __init__(self, *args, **kw):
-        super(Decimal, self).__init__(*args, **kw)
-
-    def fromUnicode(self, uc):
-        """ See IFromUnicode.
-        """
-        try:
-            v = decimal.Decimal(uc)
-        except decimal.InvalidOperation:
-            raise InvalidDecimalLiteral(uc).with_field_and_value(self, uc)
-        self.validate(v)
-        return v
+    _unicode_converters = (decimal.Decimal,)
+    _validation_error = InvalidDecimalLiteral
 
 
 @implementer(IDatetime)
@@ -505,9 +554,10 @@ def _validate_sequence(value_type, value, errors=None):
 
     To validate a sequence of various values:
 
-       >>> errors = _validate_sequence(field, (b'foo', u'bar', 1))
-       >>> errors # XXX assumes Python2 reprs
-       [WrongType('foo', <type 'unicode'>, ''), WrongType(1, <type 'unicode'>, '')]
+       >>> from zope.schema._compat import text_type
+       >>> errors = _validate_sequence(field, (bytearray(b'foo'), u'bar', 1))
+       >>> errors
+       [WrongType(bytearray(b'foo'), <...>, ''), WrongType(1, <...>, '')]
 
     The only valid value in the sequence is the second item. The others
     generated errors.
@@ -516,8 +566,8 @@ def _validate_sequence(value_type, value, errors=None):
     for a new sequence:
 
        >>> errors = _validate_sequence(field, (2, u'baz'), errors)
-       >>> errors # XXX assumes Python2 reprs
-       [WrongType('foo', <type 'unicode'>, ''), WrongType(1, <type 'unicode'>, ''), WrongType(2, <type 'unicode'>, '')]
+       >>> errors
+       [WrongType(bytearray(b'foo'), <...>, ''), WrongType(1, <...>, ''), WrongType(2, <...>, '')]
 
     """
     if errors is None:
diff --git a/src/zope/schema/interfaces.py b/src/zope/schema/interfaces.py
index a1c7f35..2868b71 100644
--- a/src/zope/schema/interfaces.py
+++ b/src/zope/schema/interfaces.py
@@ -25,6 +25,11 @@ from zope.schema._bootstrapfields import Field
 from zope.schema._bootstrapfields import Text
 from zope.schema._bootstrapfields import TextLine
 from zope.schema._bootstrapfields import Bool
+from zope.schema._bootstrapfields import Number
+from zope.schema._bootstrapfields import Complex
+from zope.schema._bootstrapfields import Rational
+from zope.schema._bootstrapfields import Real
+from zope.schema._bootstrapfields import Integral
 from zope.schema._bootstrapfields import Int
 from zope.schema._bootstrapinterfaces import StopValidation
 from zope.schema._bootstrapinterfaces import ValidationError
@@ -364,9 +369,152 @@ else:  # pragma: no cover
 class IPassword(ITextLine):
     "Field containing a unicode string without newlines that is a password."
 
+###
+# Numbers
+###
 
-class IInt(IMinMax, IField):
-    """Field containing an Integer Value."""
+##
+# Abstract numbers
+##
+
+class INumber(IMinMax, IField):
+    """
+    Field containing a generic number: :class:`numbers.Number`.
+
+    .. seealso:: :class:`zope.schema.Number`
+    .. versionadded:: 4.6.0
+    """
+    min = Number(
+        title=_("Start of the range"),
+        required=False,
+        default=None
+        )
+
+    max = Number(
+        title=_("End of the range (including the value itself)"),
+        required=False,
+        default=None
+        )
+
+    default = Number(
+        title=_("Default Value"),
+        description=_("""The field default value may be None or a legal
+                        field value""")
+        )
+
+
+class IComplex(INumber):
+    """
+    Field containing a complex number: :class:`numbers.Complex`.
+
+    .. seealso:: :class:`zope.schema.Real`
+    .. versionadded:: 4.6.0
+    """
+    min = Complex(
+        title=_("Start of the range"),
+        required=False,
+        default=None
+        )
+
+    max = Complex(
+        title=_("End of the range (including the value itself)"),
+        required=False,
+        default=None
+        )
+
+    default = Complex(
+        title=_("Default Value"),
+        description=_("""The field default value may be None or a legal
+                        field value""")
+        )
+
+
+class IReal(IComplex):
+    """
+    Field containing a real number: :class:`numbers.IReal`.
+
+    .. seealso:: :class:`zope.schema.Real`
+    .. versionadded:: 4.6.0
+    """
+    min = Real(
+        title=_("Start of the range"),
+        required=False,
+        default=None
+        )
+
+    max = Real(
+        title=_("End of the range (including the value itself)"),
+        required=False,
+        default=None
+        )
+
+    default = Real(
+        title=_("Default Value"),
+        description=_("""The field default value may be None or a legal
+                        field value""")
+        )
+
+class IRational(IReal):
+    """
+    Field containing a rational number: :class:`numbers.IRational`.
+
+    .. seealso:: :class:`zope.schema.Rational`
+    .. versionadded:: 4.6.0
+    """
+
+    min = Rational(
+        title=_("Start of the range"),
+        required=False,
+        default=None
+        )
+
+    max = Rational(
+        title=_("End of the range (including the value itself)"),
+        required=False,
+        default=None
+        )
+
+    default = Rational(
+        title=_("Default Value"),
+        description=_("""The field default value may be None or a legal
+                        field value""")
+        )
+
+class IIntegral(IRational):
+    """
+    Field containing an integral number: class:`numbers.Integral`.
+
+    .. seealso:: :class:`zope.schema.Integral`
+    .. versionadded:: 4.6.0
+    """
+    min = Integral(
+        title=_("Start of the range"),
+        required=False,
+        default=None
+        )
+
+    max = Integral(
+        title=_("End of the range (including the value itself)"),
+        required=False,
+        default=None
+        )
+
+    default = Integral(
+        title=_("Default Value"),
+        description=_("""The field default value may be None or a legal
+                        field value""")
+        )
+##
+# Concrete numbers
+##
+
+class IInt(IIntegral):
+    """
+    Field containing exactly the native class :class:`int` (or, on
+    Python 2, ``long``).
+
+    .. seealso:: :class:`zope.schema.Int`
+    """
 
     min = Int(
         title=_("Start of the range"),
@@ -387,13 +535,23 @@ class IInt(IMinMax, IField):
         )
 
 
-class IFloat(IMinMax, IField):
-    """Field containing a Float."""
+class IFloat(IReal):
+    """
+    Field containing exactly the native class :class:`float`.
+
+    :class:`IReal` is a more general interface, allowing all of
+    floats, ints, and fractions.
+
+    .. seealso:: :class:`zope.schema.Float`
+    """
 
 
-class IDecimal(IMinMax, IField):
-    """Field containing a Decimal."""
+class IDecimal(INumber):
+    """Field containing a :class:`decimal.Decimal`"""
 
+###
+# End numbers
+###
 
 class IDatetime(IMinMax, IField):
     """Field containing a datetime."""

Add fields/interfaces for the numeric tower
Similar to #11 and its implementation in #47 where we added fields and interfaces for `collections.Sequence`, `collections.MutableSequence`, `collections.Mapping` and`collections.MutableMapping`, I think it makes sense to have fields and interfaces for `numbers.Number`, `numbers.Real`, `numbers.Rational` and `numbers.Integral`.

In our own usage, we commonly parse data from JSON, and depending on the browser/client, we can get floats or ints for the same field, so we use a `Number` field that allows `numbers.Number`. But it's badly specified, what we *really* want is a `numbers.Real` field.
diff --git a/src/zope/schema/tests/test__bootstrapfields.py b/src/zope/schema/tests/test__bootstrapfields.py
index 3e6365a..419378a 100644
--- a/src/zope/schema/tests/test__bootstrapfields.py
+++ b/src/zope/schema/tests/test__bootstrapfields.py
@@ -11,8 +11,132 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
+import doctest
 import unittest
 
+# pylint:disable=protected-access
+
+class EqualityTestsMixin(object):
+
+    def _getTargetClass(self):
+        raise NotImplementedError
+
+    def _getTargetInterface(self):
+        raise NotImplementedError
+
+    def _makeOne(self, *args, **kwargs):
+        return self._makeOneFromClass(self._getTargetClass(),
+                                      *args,
+                                      **kwargs)
+
+    def _makeOneFromClass(self, cls, *args, **kwargs):
+        return cls(*args, **kwargs)
+
+    def test_class_conforms_to_iface(self):
+        from zope.interface.verify import verifyClass
+        cls = self._getTargetClass()
+        __traceback_info__ = cls
+        verifyClass(self._getTargetInterface(), cls)
+        return verifyClass
+
+    def test_instance_conforms_to_iface(self):
+        from zope.interface.verify import verifyObject
+        instance = self._makeOne()
+        __traceback_info__ = instance
+        verifyObject(self._getTargetInterface(), instance)
+        return verifyObject
+
+    def test_is_hashable(self):
+        field = self._makeOne()
+        hash(field)  # doesn't raise
+
+    def test_equal_instances_have_same_hash(self):
+        # Equal objects should have equal hashes
+        field1 = self._makeOne()
+        field2 = self._makeOne()
+        self.assertIsNot(field1, field2)
+        self.assertEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+    def test_instances_in_different_interfaces_not_equal(self):
+        from zope import interface
+
+        field1 = self._makeOne()
+        field2 = self._makeOne()
+        self.assertEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+        class IOne(interface.Interface):
+            one = field1
+
+        class ITwo(interface.Interface):
+            two = field2
+
+        self.assertEqual(field1, field1)
+        self.assertEqual(field2, field2)
+        self.assertNotEqual(field1, field2)
+        self.assertNotEqual(hash(field1), hash(field2))
+
+    def test_hash_across_unequal_instances(self):
+        # Hash equality does not imply equal objects.
+        # Our implementation only considers property names,
+        # not values. That's OK, a dict still does the right thing.
+        field1 = self._makeOne(title=u'foo')
+        field2 = self._makeOne(title=u'bar')
+        self.assertIsNot(field1, field2)
+        self.assertNotEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+        d = {field1: 42}
+        self.assertIn(field1, d)
+        self.assertEqual(42, d[field1])
+        self.assertNotIn(field2, d)
+        with self.assertRaises(KeyError):
+            d.__getitem__(field2)
+
+    def test___eq___different_type(self):
+        left = self._makeOne()
+
+        class Derived(self._getTargetClass()):
+            pass
+        right = self._makeOneFromClass(Derived)
+        self.assertNotEqual(left, right)
+        self.assertTrue(left != right)
+
+    def test___eq___same_type_different_attrs(self):
+        left = self._makeOne(required=True)
+        right = self._makeOne(required=False)
+        self.assertNotEqual(left, right)
+        self.assertTrue(left != right)
+
+    def test___eq___same_type_same_attrs(self):
+        left = self._makeOne()
+        self.assertEqual(left, left)
+
+        right = self._makeOne()
+        self.assertEqual(left, right)
+        self.assertFalse(left != right)
+
+
+class OrderableMissingValueMixin(object):
+    mvm_missing_value = -1
+    mvm_default = 0
+
+    def test_missing_value_no_min_or_max(self):
+        # We should be able to provide a missing_value without
+        # also providing a min or max. But note that we must still
+        # provide a default.
+        # See https://github.com/zopefoundation/zope.schema/issues/9
+        Kind = self._getTargetClass()
+        self.assertTrue(Kind.min._allow_none)
+        self.assertTrue(Kind.max._allow_none)
+
+        field = self._makeOne(missing_value=self.mvm_missing_value,
+                              default=self.mvm_default)
+        self.assertIsNone(field.min)
+        self.assertIsNone(field.max)
+        self.assertEqual(self.mvm_missing_value, field.missing_value)
+
 
 class ValidatedPropertyTests(unittest.TestCase):
 
@@ -142,86 +266,6 @@ class DefaultPropertyTests(unittest.TestCase):
         self.assertEqual(_called_with, [inst.context])
 
 
-class EqualityTestsMixin(object):
-
-    def _getTargetClass(self):
-        raise NotImplementedError
-
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_is_hashable(self):
-        field = self._makeOne()
-        hash(field)  # doesn't raise
-
-    def test_equal_instances_have_same_hash(self):
-        # Equal objects should have equal hashes
-        field1 = self._makeOne()
-        field2 = self._makeOne()
-        self.assertIsNot(field1, field2)
-        self.assertEqual(field1, field2)
-        self.assertEqual(hash(field1), hash(field2))
-
-    def test_instances_in_different_interfaces_not_equal(self):
-        from zope import interface
-
-        field1 = self._makeOne()
-        field2 = self._makeOne()
-        self.assertEqual(field1, field2)
-        self.assertEqual(hash(field1), hash(field2))
-
-        class IOne(interface.Interface):
-            one = field1
-
-        class ITwo(interface.Interface):
-            two = field2
-
-        self.assertEqual(field1, field1)
-        self.assertEqual(field2, field2)
-        self.assertNotEqual(field1, field2)
-        self.assertNotEqual(hash(field1), hash(field2))
-
-    def test_hash_across_unequal_instances(self):
-        # Hash equality does not imply equal objects.
-        # Our implementation only considers property names,
-        # not values. That's OK, a dict still does the right thing.
-        field1 = self._makeOne(title=u'foo')
-        field2 = self._makeOne(title=u'bar')
-        self.assertIsNot(field1, field2)
-        self.assertNotEqual(field1, field2)
-        self.assertEqual(hash(field1), hash(field2))
-
-        d = {field1: 42}
-        self.assertIn(field1, d)
-        self.assertEqual(42, d[field1])
-        self.assertNotIn(field2, d)
-        with self.assertRaises(KeyError):
-            d.__getitem__(field2)
-
-    def test___eq___different_type(self):
-        left = self._makeOne()
-
-        class Derived(self._getTargetClass()):
-            pass
-        right = Derived()
-        self.assertNotEqual(left, right)
-        self.assertTrue(left != right)
-
-    def test___eq___same_type_different_attrs(self):
-        left = self._makeOne(required=True)
-        right = self._makeOne(required=False)
-        self.assertNotEqual(left, right)
-        self.assertTrue(left != right)
-
-    def test___eq___same_type_same_attrs(self):
-        left = self._makeOne()
-        self.assertEqual(left, left)
-
-        right = self._makeOne()
-        self.assertEqual(left, right)
-        self.assertFalse(left != right)
-
-
 class FieldTests(EqualityTestsMixin,
                  unittest.TestCase):
 
@@ -229,8 +273,9 @@ class FieldTests(EqualityTestsMixin,
         from zope.schema._bootstrapfields import Field
         return Field
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IField
+        return IField
 
     def test_ctor_defaults(self):
 
@@ -432,6 +477,10 @@ class ContainerTests(EqualityTestsMixin,
         from zope.schema._bootstrapfields import Container
         return Container
 
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IContainer
+        return IContainer
+
     def test_validate_not_required(self):
         field = self._makeOne(required=False)
         field.validate(None)
@@ -482,6 +531,10 @@ class IterableTests(ContainerTests):
         from zope.schema._bootstrapfields import Iterable
         return Iterable
 
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IIterable
+        return IIterable
+
     def test__validate_collection_but_not_iterable(self):
         from zope.schema._bootstrapinterfaces import NotAnIterator
         itr = self._makeOne()
@@ -566,6 +619,10 @@ class TextTests(EqualityTestsMixin,
         from zope.schema._bootstrapfields import Text
         return Text
 
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IText
+        return IText
+
     def test_ctor_defaults(self):
         from zope.schema._compat import text_type
         txt = self._makeOne()
@@ -628,15 +685,9 @@ class TextLineTests(EqualityTestsMixin,
         from zope.schema._field import TextLine
         return TextLine
 
-    def test_class_conforms_to_ITextLine(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import ITextLine
-        verifyClass(ITextLine, self._getTargetClass())
-
-    def test_instance_conforms_to_ITextLine(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import ITextLine
-        verifyObject(ITextLine, self._makeOne())
+        return ITextLine
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -675,14 +726,16 @@ class TextLineTests(EqualityTestsMixin,
         self.assertEqual(field.constraint(u'abc\ndef'), False)
 
 
-class PasswordTests(unittest.TestCase):
+class PasswordTests(EqualityTestsMixin,
+                    unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Password
         return Password
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IPassword
+        return IPassword
 
     def test_set_unchanged(self):
         klass = self._getTargetClass()
@@ -744,6 +797,10 @@ class BoolTests(EqualityTestsMixin,
         from zope.schema._bootstrapfields import Bool
         return Bool
 
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IBool
+        return IBool
+
     def test_ctor_defaults(self):
         txt = self._makeOne()
         self.assertEqual(txt._type, bool)
@@ -777,39 +834,87 @@ class BoolTests(EqualityTestsMixin,
         self.assertEqual(txt.fromUnicode(u'true'), True)
 
 
-class OrderableMissingValueMixin(object):
+class NumberTests(EqualityTestsMixin,
+                  OrderableMissingValueMixin,
+                  unittest.TestCase):
 
-    mvm_missing_value = -1
-    mvm_default = 0
+    def _getTargetClass(self):
+        from zope.schema._bootstrapfields import Number
+        return Number
 
-    def test_missing_value_no_min_or_max(self):
-        # We should be able to provide a missing_value without
-        # also providing a min or max. But note that we must still
-        # provide a default.
-        # See https://github.com/zopefoundation/zope.schema/issues/9
-        Kind = self._getTargetClass()
-        self.assertTrue(Kind.min._allow_none)
-        self.assertTrue(Kind.max._allow_none)
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import INumber
+        return INumber
 
-        field = self._makeOne(missing_value=self.mvm_missing_value,
-                              default=self.mvm_default)
-        self.assertIsNone(field.min)
-        self.assertIsNone(field.max)
-        self.assertEqual(self.mvm_missing_value, field.missing_value)
+    def test_class_conforms_to_iface(self):
+        from zope.schema._bootstrapinterfaces import IFromUnicode
+        verifyClass = super(NumberTests, self).test_class_conforms_to_iface()
+        verifyClass(IFromUnicode, self._getTargetClass())
+
+    def test_instance_conforms_to_iface(self):
+        from zope.schema._bootstrapinterfaces import IFromUnicode
+        verifyObject = super(NumberTests, self).test_instance_conforms_to_iface()
+        verifyObject(IFromUnicode, self._makeOne())
 
 
-class IntTests(EqualityTestsMixin,
-               OrderableMissingValueMixin,
-               unittest.TestCase):
+class ComplexTests(NumberTests):
 
     def _getTargetClass(self):
-        from zope.schema._bootstrapfields import Int
-        return Int
+        from zope.schema._bootstrapfields import Complex
+        return Complex
 
-    def test_ctor_defaults(self):
-        from zope.schema._compat import integer_types
-        txt = self._makeOne()
-        self.assertEqual(txt._type, integer_types)
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IComplex
+        return IComplex
+
+class RealTests(NumberTests):
+
+    def _getTargetClass(self):
+        from zope.schema._bootstrapfields import Real
+        return Real
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IReal
+        return IReal
+
+    def test_ctor_real_min_max(self):
+        from zope.schema.interfaces import WrongType
+        from zope.schema.interfaces import TooSmall
+        from zope.schema.interfaces import TooBig
+        from fractions import Fraction
+
+        with self.assertRaises(WrongType):
+            self._makeOne(min='')
+        with self.assertRaises(WrongType):
+            self._makeOne(max='')
+
+        field = self._makeOne(min=Fraction(1, 2), max=2)
+        field.validate(1.0)
+        field.validate(2.0)
+        self.assertRaises(TooSmall, field.validate, 0)
+        self.assertRaises(TooSmall, field.validate, 0.4)
+        self.assertRaises(TooBig, field.validate, 2.1)
+
+class RationalTests(NumberTests):
+
+    def _getTargetClass(self):
+        from zope.schema._bootstrapfields import Rational
+        return Rational
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IRational
+        return IRational
+
+
+class IntegralTests(RationalTests):
+
+    def _getTargetClass(self):
+        from zope.schema._bootstrapfields import Integral
+        return Integral
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IIntegral
+        return IIntegral
 
     def test_validate_not_required(self):
         field = self._makeOne(required=False)
@@ -870,6 +975,22 @@ class IntTests(EqualityTestsMixin,
         self.assertEqual(txt.fromUnicode(u'-1'), -1)
 
 
+class IntTests(IntegralTests):
+
+    def _getTargetClass(self):
+        from zope.schema._bootstrapfields import Int
+        return Int
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IInt
+        return IInt
+
+    def test_ctor_defaults(self):
+        from zope.schema._compat import integer_types
+        txt = self._makeOne()
+        self.assertEqual(txt._type, integer_types)
+
+
 class DummyInst(object):
     missing_value = object()
 
@@ -879,3 +1000,14 @@ class DummyInst(object):
     def validate(self, value):
         if self._exc is not None:
             raise self._exc()
+
+
+def test_suite():
+    import zope.schema._bootstrapfields
+    from zope.testing.renormalizing import IGNORE_EXCEPTION_MODULE_IN_PYTHON2
+    suite = unittest.defaultTestLoader.loadTestsFromName(__name__)
+    suite.addTests(doctest.DocTestSuite(
+        zope.schema._bootstrapfields,
+        optionflags=doctest.ELLIPSIS|IGNORE_EXCEPTION_MODULE_IN_PYTHON2
+    ))
+    return suite
diff --git a/src/zope/schema/tests/test__field.py b/src/zope/schema/tests/test__field.py
index c035e85..cb0e127 100644
--- a/src/zope/schema/tests/test__field.py
+++ b/src/zope/schema/tests/test__field.py
@@ -13,9 +13,12 @@
 ##############################################################################
 import datetime
 import decimal
+import doctest
 import unittest
 
 from zope.schema.tests.test__bootstrapfields import OrderableMissingValueMixin
+from zope.schema.tests.test__bootstrapfields import EqualityTestsMixin
+
 
 # pylint:disable=protected-access
 # pylint:disable=too-many-lines
@@ -23,24 +26,15 @@ from zope.schema.tests.test__bootstrapfields import OrderableMissingValueMixin
 # pylint:disable=no-member
 # pylint:disable=blacklisted-name
 
-class BytesTests(unittest.TestCase):
+class BytesTests(EqualityTestsMixin, unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import Bytes
         return Bytes
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IBytes(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IBytes
-        verifyClass(IBytes, self._getTargetClass())
-
-    def test_instance_conforms_to_IBytes(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IBytes
-        verifyObject(IBytes, self._makeOne())
+        return IBytes
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -89,24 +83,16 @@ class BytesTests(unittest.TestCase):
         self.assertEqual(byt.fromUnicode(u'DEADBEEF'), b'DEADBEEF')
 
 
-class ASCIITests(unittest.TestCase):
+class ASCIITests(EqualityTestsMixin,
+                 unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import ASCII
         return ASCII
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IASCII(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IASCII
-        verifyClass(IASCII, self._getTargetClass())
-
-    def test_instance_conforms_to_IASCII(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IASCII
-        verifyObject(IASCII, self._makeOne())
+        return IASCII
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -142,24 +128,16 @@ class ASCIITests(unittest.TestCase):
             asc._validate(chr(i))  # doesn't raise
 
 
-class BytesLineTests(unittest.TestCase):
+class BytesLineTests(EqualityTestsMixin,
+                     unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import BytesLine
         return BytesLine
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IBytesLine(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IBytesLine
-        verifyClass(IBytesLine, self._getTargetClass())
-
-    def test_instance_conforms_to_IBytesLine(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IBytesLine
-        verifyObject(IBytesLine, self._makeOne())
+        return IBytesLine
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -202,24 +180,16 @@ class BytesLineTests(unittest.TestCase):
         self.assertEqual(field.constraint(b'abc\ndef'), False)
 
 
-class ASCIILineTests(unittest.TestCase):
+class ASCIILineTests(EqualityTestsMixin,
+                     unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import ASCIILine
         return ASCIILine
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IASCIILine(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IASCIILine
-        verifyClass(IASCIILine, self._getTargetClass())
-
-    def test_instance_conforms_to_IASCIILine(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IASCIILine
-        verifyObject(IASCIILine, self._makeOne())
+        return IASCIILine
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -262,7 +232,7 @@ class ASCIILineTests(unittest.TestCase):
         self.assertEqual(field.constraint('abc\ndef'), False)
 
 
-class FloatTests(OrderableMissingValueMixin,
+class FloatTests(OrderableMissingValueMixin, EqualityTestsMixin,
                  unittest.TestCase):
 
     mvm_missing_value = -1.0
@@ -272,18 +242,9 @@ class FloatTests(OrderableMissingValueMixin,
         from zope.schema._field import Float
         return Float
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IFloat(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IFloat
-        verifyClass(IFloat, self._getTargetClass())
-
-    def test_instance_conforms_to_IFloat(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IFloat
-        verifyObject(IFloat, self._makeOne())
+        return IFloat
 
     def test_validate_not_required(self):
         field = self._makeOne(required=False)
@@ -343,7 +304,7 @@ class FloatTests(OrderableMissingValueMixin,
         self.assertEqual(flt.fromUnicode(u'1.23e6'), 1230000.0)
 
 
-class DecimalTests(OrderableMissingValueMixin,
+class DecimalTests(OrderableMissingValueMixin, EqualityTestsMixin,
                    unittest.TestCase):
 
     mvm_missing_value = decimal.Decimal("-1")
@@ -353,18 +314,9 @@ class DecimalTests(OrderableMissingValueMixin,
         from zope.schema._field import Decimal
         return Decimal
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IDecimal(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IDecimal
-        verifyClass(IDecimal, self._getTargetClass())
-
-    def test_instance_conforms_to_IDecimal(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IDecimal
-        verifyObject(IDecimal, self._makeOne())
+        return IDecimal
 
     def test_validate_not_required(self):
         field = self._makeOne(required=False)
@@ -443,7 +395,7 @@ class DecimalTests(OrderableMissingValueMixin,
         self.assertEqual(flt.fromUnicode(u'12345.6'), Decimal('12345.6'))
 
 
-class DatetimeTests(OrderableMissingValueMixin,
+class DatetimeTests(OrderableMissingValueMixin, EqualityTestsMixin,
                     unittest.TestCase):
 
     mvm_missing_value = datetime.datetime.now()
@@ -453,18 +405,9 @@ class DatetimeTests(OrderableMissingValueMixin,
         from zope.schema._field import Datetime
         return Datetime
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IDatetime(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IDatetime
-        verifyClass(IDatetime, self._getTargetClass())
-
-    def test_instance_conforms_to_IDatetime(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IDatetime
-        verifyObject(IDatetime, self._makeOne())
+        return IDatetime
 
     def test_validate_wrong_types(self):
         from datetime import date
@@ -529,7 +472,7 @@ class DatetimeTests(OrderableMissingValueMixin,
         self.assertRaises(TooBig, field.validate, d5)
 
 
-class DateTests(OrderableMissingValueMixin,
+class DateTests(OrderableMissingValueMixin, EqualityTestsMixin,
                 unittest.TestCase):
 
     mvm_missing_value = datetime.date.today()
@@ -539,18 +482,9 @@ class DateTests(OrderableMissingValueMixin,
         from zope.schema._field import Date
         return Date
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IDate(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IDate
-        verifyClass(IDate, self._getTargetClass())
-
-    def test_instance_conforms_to_IDate(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IDate
-        verifyObject(IDate, self._makeOne())
+        return IDate
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -625,7 +559,7 @@ class DateTests(OrderableMissingValueMixin,
         self.assertRaises(TooBig, field.validate, d5)
 
 
-class TimedeltaTests(OrderableMissingValueMixin,
+class TimedeltaTests(OrderableMissingValueMixin, EqualityTestsMixin,
                      unittest.TestCase):
 
     mvm_missing_value = datetime.timedelta(minutes=15)
@@ -635,18 +569,9 @@ class TimedeltaTests(OrderableMissingValueMixin,
         from zope.schema._field import Timedelta
         return Timedelta
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_ITimedelta(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import ITimedelta
-        verifyClass(ITimedelta, self._getTargetClass())
-
-    def test_instance_conforms_to_ITimedelta(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import ITimedelta
-        verifyObject(ITimedelta, self._makeOne())
+        return ITimedelta
 
     def test_validate_not_required(self):
         from datetime import timedelta
@@ -699,7 +624,7 @@ class TimedeltaTests(OrderableMissingValueMixin,
         self.assertRaises(TooBig, field.validate, t5)
 
 
-class TimeTests(OrderableMissingValueMixin,
+class TimeTests(OrderableMissingValueMixin, EqualityTestsMixin,
                 unittest.TestCase):
 
     mvm_missing_value = datetime.time(12, 15, 37)
@@ -709,18 +634,9 @@ class TimeTests(OrderableMissingValueMixin,
         from zope.schema._field import Time
         return Time
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_ITime(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import ITime
-        verifyClass(ITime, self._getTargetClass())
-
-    def test_instance_conforms_to_ITime(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import ITime
-        verifyObject(ITime, self._makeOne())
+        return ITime
 
     def test_validate_not_required(self):
         from datetime import time
@@ -774,7 +690,8 @@ class TimeTests(OrderableMissingValueMixin,
         self.assertRaises(TooBig, field.validate, t5)
 
 
-class ChoiceTests(unittest.TestCase):
+class ChoiceTests(EqualityTestsMixin,
+                  unittest.TestCase):
 
     def setUp(self):
         from zope.schema.vocabulary import _clear
@@ -788,27 +705,31 @@ class ChoiceTests(unittest.TestCase):
         from zope.schema._field import Choice
         return Choice
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
+    from zope.schema.vocabulary import SimpleVocabulary
+    # SimpleVocabulary uses identity semantics for equality
+    _default_vocabulary = SimpleVocabulary.fromValues([1, 2, 3])
 
-    def test_class_conforms_to_IChoice(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IChoice
-        verifyClass(IChoice, self._getTargetClass())
+    def _makeOneFromClass(self, cls, *args, **kwargs):
+        if (not args
+            and 'vocabulary' not in kwargs
+            and 'values' not in kwargs
+            and 'source' not in kwargs):
+            kwargs['vocabulary'] = self._default_vocabulary
+        return super(ChoiceTests, self)._makeOneFromClass(cls, *args, **kwargs)
 
-    def test_instance_conforms_to_IChoice(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IChoice
-        verifyObject(IChoice, self._makeOne(values=[1, 2, 3]))
+        return IChoice
+
 
     def test_ctor_wo_values_vocabulary_or_source(self):
-        self.assertRaises(ValueError, self._makeOne)
+        self.assertRaises(ValueError, self._getTargetClass())
 
     def test_ctor_invalid_vocabulary(self):
-        self.assertRaises(ValueError, self._makeOne, vocabulary=object())
+        self.assertRaises(ValueError, self._getTargetClass(), vocabulary=object())
 
     def test_ctor_invalid_source(self):
-        self.assertRaises(ValueError, self._makeOne, source=object())
+        self.assertRaises(ValueError, self._getTargetClass(), source=object())
 
     def test_ctor_both_vocabulary_and_source(self):
         self.assertRaises(
@@ -1024,24 +945,16 @@ class ChoiceTests(unittest.TestCase):
         self.assertRaises(ConstraintNotSatisfied, clone._validate, 42)
 
 
-class URITests(unittest.TestCase):
+class URITests(EqualityTestsMixin,
+               unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import URI
         return URI
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IURI(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IURI
-        verifyClass(IURI, self._getTargetClass())
-
-    def test_instance_conforms_to_IURI(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IURI
-        verifyObject(IURI, self._makeOne())
+        return IURI
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -1101,24 +1014,16 @@ class URITests(unittest.TestCase):
                           field.fromUnicode, u'http://example.com/\nDAV:')
 
 
-class DottedNameTests(unittest.TestCase):
+class DottedNameTests(EqualityTestsMixin,
+                      unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import DottedName
         return DottedName
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IDottedName(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IDottedName
-        verifyClass(IDottedName, self._getTargetClass())
-
-    def test_instance_conforms_to_IDottedName(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IDottedName
-        verifyObject(IDottedName, self._makeOne())
+        return IDottedName
 
     def test_ctor_defaults(self):
         dotted = self._makeOne()
@@ -1219,24 +1124,16 @@ class DottedNameTests(unittest.TestCase):
                           field.fromUnicode, u'http://example.com/\nDAV:')
 
 
-class IdTests(unittest.TestCase):
+class IdTests(EqualityTestsMixin,
+              unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import Id
         return Id
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IId(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IId
-        verifyClass(IId, self._getTargetClass())
-
-    def test_instance_conforms_to_IId(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IId
-        verifyObject(IId, self._makeOne())
+        return IId
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
@@ -1310,24 +1207,16 @@ class IdTests(unittest.TestCase):
                           field.fromUnicode, u'http://example.com/\nDAV:')
 
 
-class InterfaceFieldTests(unittest.TestCase):
+class InterfaceFieldTests(EqualityTestsMixin,
+                          unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import InterfaceField
         return InterfaceField
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_IInterfaceField(self):
-        from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IInterfaceField
-        verifyClass(IInterfaceField, self._getTargetClass())
-
-    def test_instance_conforms_to_IInterfaceField(self):
-        from zope.interface.verify import verifyObject
+    def _getTargetInterface(self):
         from zope.schema.interfaces import IInterfaceField
-        verifyObject(IInterfaceField, self._makeOne())
+        return IInterfaceField
 
     def test_validate_wrong_types(self):
         from datetime import date
@@ -1375,7 +1264,8 @@ class InterfaceFieldTests(unittest.TestCase):
         self.assertRaises(RequiredMissing, field.validate, None)
 
 
-class CollectionTests(unittest.TestCase):
+class CollectionTests(EqualityTestsMixin,
+                      unittest.TestCase):
 
     _DEFAULT_UNIQUE = False
 
@@ -1387,19 +1277,8 @@ class CollectionTests(unittest.TestCase):
         from zope.schema.interfaces import ICollection
         return ICollection
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     _makeCollection = list
 
-    def test_class_conforms_to_iface(self):
-        from zope.interface.verify import verifyClass
-        verifyClass(self._getTargetInterface(), self._getTargetClass())
-
-    def test_instance_conforms_to_iface(self):
-        from zope.interface.verify import verifyObject
-        verifyObject(self._getTargetInterface(), self._makeOne())
-
 
     def test_schema_defined_by_subclass(self):
         from zope import interface
@@ -1714,7 +1593,8 @@ class FrozenSetTests(SetTests):
         return IFrozenSet
 
 
-class ObjectTests(unittest.TestCase):
+class ObjectTests(EqualityTestsMixin,
+                  unittest.TestCase):
 
     def setUp(self):
         from zope.event import subscribers
@@ -1728,10 +1608,14 @@ class ObjectTests(unittest.TestCase):
         from zope.schema._field import Object
         return Object
 
-    def _makeOne(self, schema=None, *args, **kw):
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IObject
+        return IObject
+
+    def _makeOneFromClass(self, cls, schema=None, *args, **kw):
         if schema is None:
             schema = self._makeSchema()
-        return self._getTargetClass()(schema, *args, **kw)
+        return super(ObjectTests, self)._makeOneFromClass(cls, schema, *args, **kw)
 
     def _makeSchema(self, **kw):
         from zope.interface import Interface
@@ -2125,7 +2009,8 @@ class ObjectTests(unittest.TestCase):
         field.validate(ValueType())
 
 
-class MappingTests(unittest.TestCase):
+class MappingTests(EqualityTestsMixin,
+                   unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import Mapping
@@ -2135,17 +2020,6 @@ class MappingTests(unittest.TestCase):
         from zope.schema.interfaces import IMapping
         return IMapping
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
-    def test_class_conforms_to_iface(self):
-        from zope.interface.verify import verifyClass
-        verifyClass(self._getTargetInterface(), self._getTargetClass())
-
-    def test_instance_conforms_to_iface(self):
-        from zope.interface.verify import verifyObject
-        verifyObject(self._getTargetInterface(), self._makeOne())
-
     def test_ctor_key_type_not_IField(self):
         self.assertRaises(ValueError, self._makeOne, key_type=object())
 
@@ -2347,3 +2221,13 @@ def _makeDummyRegistry(v):
         def get(self, object, name):
             return self._vocabulary
     return DummyRegistry(v)
+
+
+def test_suite():
+    import zope.schema._field
+    suite = unittest.defaultTestLoader.loadTestsFromName(__name__)
+    suite.addTests(doctest.DocTestSuite(
+        zope.schema._field,
+        optionflags=doctest.ELLIPSIS
+    ))
+    return suite

pip install -e .[test]
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work
zope.event==5.0
zope.exceptions==5.1
zope.interface==6.4.post2
-e git+https://github.com/zopefoundation/zope.schema.git@ff8f7293507663e463a01034b506c73ca9af0718#egg=zope.schema
zope.testing==5.0.1
zope.testrunner==6.5

name: zope.schema
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - zope-event==5.0
      - zope-exceptions==5.1
      - zope-interface==6.4.post2
      - zope-testing==5.0.1
      - zope-testrunner==6.5
prefix: /opt/conda/envs/zope.schema

src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_ctor_real_min_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_required
src/zope/schema/tests/test__bootstrapfields.py::test_suite
src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___get__ src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_w_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___w_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_not_ICAF_no_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_w_ICAF_w_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_hit src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_miss src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test__get___wo_defaultFactory_in_dict src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_bind src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_order_madness src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_both_title_and_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_title_wo_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_wo_title_w_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_constraint_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory_returning_missing_value src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_required_readonly_missingValue src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_miss src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_no_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_w_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_readonly src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_fails src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_raises_StopValidation src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_and_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_not_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_wrong_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_large src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_small src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_long src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_short src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_w_invalid_default src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_normal src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_unchanged src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_already_set src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_not_already_set src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test__validate_w_int src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_set_w_int src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_required src/zope/schema/tests/test__field.py::BytesTests::test___eq___different_type src/zope/schema/tests/test__field.py::BytesTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::BytesTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::BytesTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::BytesTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::BytesTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::BytesTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::BytesTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::BytesTests::test_is_hashable src/zope/schema/tests/test__field.py::BytesTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_w_invalid_default src/zope/schema/tests/test__field.py::BytesTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIITests::test___eq___different_type src/zope/schema/tests/test__field.py::ASCIITests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ASCIITests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ASCIITests::test__validate_empty src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_hit src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_miss src/zope/schema/tests/test__field.py::ASCIITests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIITests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ASCIITests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ASCIITests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIITests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ASCIITests::test_is_hashable src/zope/schema/tests/test__field.py::ASCIITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___different_type src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::BytesLineTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::BytesLineTests::test_constraint src/zope/schema/tests/test__field.py::BytesLineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::BytesLineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::BytesLineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::BytesLineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::BytesLineTests::test_is_hashable src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___different_type src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ASCIILineTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIILineTests::test_constraint src/zope/schema/tests/test__field.py::ASCIILineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ASCIILineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ASCIILineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIILineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ASCIILineTests::test_is_hashable src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_not_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FloatTests::test___eq___different_type src/zope/schema/tests/test__field.py::FloatTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::FloatTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::FloatTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::FloatTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::FloatTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::FloatTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::FloatTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::FloatTests::test_is_hashable src/zope/schema/tests/test__field.py::FloatTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_min src/zope/schema/tests/test__field.py::FloatTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_not_required src/zope/schema/tests/test__field.py::FloatTests::test_validate_required src/zope/schema/tests/test__field.py::DecimalTests::test___eq___different_type src/zope/schema/tests/test__field.py::DecimalTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DecimalTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DecimalTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DecimalTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::DecimalTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DecimalTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DecimalTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DecimalTests::test_is_hashable src/zope/schema/tests/test__field.py::DecimalTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_not_required src/zope/schema/tests/test__field.py::DecimalTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___different_type src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DatetimeTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DatetimeTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DatetimeTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DatetimeTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DatetimeTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DatetimeTests::test_is_hashable src/zope/schema/tests/test__field.py::DatetimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DateTests::test___eq___different_type src/zope/schema/tests/test__field.py::DateTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DateTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DateTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DateTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DateTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DateTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DateTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DateTests::test_is_hashable src/zope/schema/tests/test__field.py::DateTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DateTests::test_validate_not_required src/zope/schema/tests/test__field.py::DateTests::test_validate_required src/zope/schema/tests/test__field.py::DateTests::test_validate_w_max src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DateTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___different_type src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TimedeltaTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TimedeltaTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TimedeltaTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TimedeltaTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TimedeltaTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TimedeltaTests::test_is_hashable src/zope/schema/tests/test__field.py::TimedeltaTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_required src/zope/schema/tests/test__field.py::TimeTests::test___eq___different_type src/zope/schema/tests/test__field.py::TimeTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TimeTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TimeTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TimeTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TimeTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TimeTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TimeTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TimeTests::test_is_hashable src/zope/schema/tests/test__field.py::TimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_min src/zope/schema/tests/test__field.py::TimeTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimeTests::test_validate_required src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___different_type src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_int src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_mixed src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_bound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_unbound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_string src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_tuple src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary_invalid src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB_but_not_ISource src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_not_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_unicode_non_ascii_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_wo_values_vocabulary_or_source src/zope/schema/tests/test__field.py::ChoiceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::ChoiceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ChoiceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ChoiceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ChoiceTests::test_is_hashable src/zope/schema/tests/test__field.py::URITests::test___eq___different_type src/zope/schema/tests/test__field.py::URITests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::URITests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::URITests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::URITests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_ok src/zope/schema/tests/test__field.py::URITests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::URITests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::URITests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::URITests::test_is_hashable src/zope/schema/tests/test__field.py::URITests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::URITests::test_validate_not_required src/zope/schema/tests/test__field.py::URITests::test_validate_required src/zope/schema/tests/test__field.py::URITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___different_type src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DottedNameTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_defaults src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DottedNameTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DottedNameTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DottedNameTests::test_is_hashable src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_a_dotted_name src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_max_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_min_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::IdTests::test___eq___different_type src/zope/schema/tests/test__field.py::IdTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::IdTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::IdTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::IdTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_url_ok src/zope/schema/tests/test__field.py::IdTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::IdTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::IdTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::IdTests::test_is_hashable src/zope/schema/tests/test__field.py::IdTests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::IdTests::test_validate_not_required src/zope/schema/tests/test__field.py::IdTests::test_validate_required src/zope/schema/tests/test__field.py::IdTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___different_type src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_is_hashable src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_not_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::CollectionTests::test___eq___different_type src/zope/schema/tests/test__field.py::CollectionTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::CollectionTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::CollectionTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::CollectionTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::CollectionTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::CollectionTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::CollectionTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_defaults src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_explicit src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::CollectionTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::CollectionTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::CollectionTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::CollectionTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::CollectionTests::test_is_hashable src/zope/schema/tests/test__field.py::CollectionTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::CollectionTests::test_validate_max_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_min_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_not_required src/zope/schema/tests/test__field.py::CollectionTests::test_validate_required src/zope/schema/tests/test__field.py::SequenceTests::test___eq___different_type src/zope/schema/tests/test__field.py::SequenceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::SequenceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::SequenceTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::SequenceTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::SequenceTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::SequenceTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::SequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_defaults src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_explicit src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::SequenceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::SequenceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::SequenceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::SequenceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::SequenceTests::test_is_hashable src/zope/schema/tests/test__field.py::SequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::SequenceTests::test_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::TupleTests::test___eq___different_type src/zope/schema/tests/test__field.py::TupleTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TupleTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TupleTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::TupleTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::TupleTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::TupleTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::TupleTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TupleTests::test_ctor_defaults src/zope/schema/tests/test__field.py::TupleTests::test_ctor_explicit src/zope/schema/tests/test__field.py::TupleTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::TupleTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TupleTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TupleTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TupleTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TupleTests::test_is_hashable src/zope/schema/tests/test__field.py::TupleTests::test_mutable_sequence src/zope/schema/tests/test__field.py::TupleTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::TupleTests::test_sequence src/zope/schema/tests/test__field.py::TupleTests::test_validate_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_not_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___different_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MutableSequenceTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::MutableSequenceTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_defaults src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_explicit src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MutableSequenceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MutableSequenceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MutableSequenceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MutableSequenceTests::test_is_hashable src/zope/schema/tests/test__field.py::MutableSequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::MutableSequenceTests::test_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ListTests::test___eq___different_type src/zope/schema/tests/test__field.py::ListTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ListTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ListTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::ListTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::ListTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::ListTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::ListTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ListTests::test_ctor_defaults src/zope/schema/tests/test__field.py::ListTests::test_ctor_explicit src/zope/schema/tests/test__field.py::ListTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::ListTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ListTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ListTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ListTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ListTests::test_is_hashable src/zope/schema/tests/test__field.py::ListTests::test_mutable_sequence src/zope/schema/tests/test__field.py::ListTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::ListTests::test_sequence src/zope/schema/tests/test__field.py::ListTests::test_validate_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_not_required src/zope/schema/tests/test__field.py::ListTests::test_validate_required src/zope/schema/tests/test__field.py::ListTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::SetTests::test___eq___different_type src/zope/schema/tests/test__field.py::SetTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::SetTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::SetTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::SetTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::SetTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::SetTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::SetTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::SetTests::test_ctor_defaults src/zope/schema/tests/test__field.py::SetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::SetTests::test_ctor_explicit src/zope/schema/tests/test__field.py::SetTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::SetTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::SetTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::SetTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::SetTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::SetTests::test_is_hashable src/zope/schema/tests/test__field.py::SetTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::SetTests::test_validate_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_not_required src/zope/schema/tests/test__field.py::SetTests::test_validate_required src/zope/schema/tests/test__field.py::SetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___different_type src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::FrozenSetTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::FrozenSetTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::FrozenSetTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::FrozenSetTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::FrozenSetTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_defaults src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_explicit src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::FrozenSetTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::FrozenSetTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::FrozenSetTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::FrozenSetTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::FrozenSetTests::test_is_hashable src/zope/schema/tests/test__field.py::FrozenSetTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_not_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ObjectTests::test___eq___different_type src/zope/schema/tests/test__field.py::ObjectTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ObjectTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_empty_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_not_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_invalid_fields src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_missing_fields src/zope/schema/tests/test__field.py::ObjectTests::test_class_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ObjectTests::test_ctor_w_bad_schema src/zope/schema/tests/test__field.py::ObjectTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ObjectTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ObjectTests::test_instance_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ObjectTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ObjectTests::test_is_hashable src/zope/schema/tests/test__field.py::ObjectTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::ObjectTests::test_set_allows_IBOAE_subscr_to_replace_value src/zope/schema/tests/test__field.py::ObjectTests::test_set_emits_IBOAE src/zope/schema/tests/test__field.py::ObjectTests::test_validate_not_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_collection_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_object_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validates_invariants_by_default src/zope/schema/tests/test__field.py::MappingTests::test___eq___different_type src/zope/schema/tests/test__field.py::MappingTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MappingTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MappingTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MappingTests::test_is_hashable src/zope/schema/tests/test__field.py::MappingTests::test_mapping src/zope/schema/tests/test__field.py::MappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___different_type src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MutableMappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MutableMappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MutableMappingTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MutableMappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MutableMappingTests::test_is_hashable src/zope/schema/tests/test__field.py::MutableMappingTests::test_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DictTests::test___eq___different_type src/zope/schema/tests/test__field.py::DictTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DictTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DictTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::DictTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DictTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DictTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DictTests::test_is_hashable src/zope/schema/tests/test__field.py::DictTests::test_mapping src/zope/schema/tests/test__field.py::DictTests::test_mutable_mapping src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::DictTests::test_validate_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_not_required src/zope/schema/tests/test__field.py::DictTests::test_validate_required src/zope/schema/tests/test__field.py::DictTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::test_suite
src/zope/schema/_field.py src/zope/schema/_bootstrapfields.py CHANGES.rst docs/api.rst src/zope/schema/interfaces.py src/zope/schema/__init__.py
src/zope/schema/_field.py src/zope/schema/_bootstrapfields.py CHANGES.rst docs/api.rst src/zope/schema/interfaces.py src/zope/schema/__init__.py