org.jmlspecs.jmlunit.strategies
Class ObjectArrayAbstractIterator
java.lang.Object
org.jmlspecs.jmlunit.strategies.ObjectArrayAbstractIterator
- All Implemented Interfaces:
- Cloneable, IndefiniteIterator
- Direct Known Subclasses:
- CloneableObjectArrayAbstractIterator, ImmutableObjectArrayIterator
- public abstract class ObjectArrayAbstractIterator
- extends Object
- implements IndefiniteIterator
An indefinite iterator that provides test data from an array of
objects passed to its constructor.
This can only handle iterations up to Integer.MAX_VALUE elements.
- Author:
- Gary T. Leavens
Class Specifications |
public invariant 0 <= this.next&&this.next <= this.elems.length; |
Specifications inherited from class Object |
represents objectState <- org.jmlspecs.lang.JMLDataGroup.IT;
public represents _getClass <- \typeof(this); |
Field Summary |
[spec_public] private Object[] |
elems
The elements |
[spec_public] private int |
next
The next element's index (zero based) |
next
private int next
- The next element's index (zero based)
- Specifications: spec_public
is in groups: objectState
elems
private Object[] elems
- The elements
- Specifications: spec_public non_null
is in groups: objectState
ObjectArrayAbstractIterator
public ObjectArrayAbstractIterator(Object[] elems)
- Initialize this iterator to iterate over a clone of the array
- Specifications:
-
public normal_behavior
requires elems != null;
assignable this.elems, next;
ensures this.next == 0&&java.util.Arrays.equals(elems,this.elems);
ensures \fresh(this.elems);
ensures_redundantly this.elems != null&&this.elems != elems;
ensures_redundantly this.elems.length == elems.length;
atEnd
public boolean atEnd()
- Description copied from interface:
IndefiniteIterator
- Is this iterator at its end? That is, if we called get(),
would it throw an exception?
- Specified by:
atEnd
in interface IndefiniteIterator
- Specifications: pure
- also
-
public normal_behavior
ensures \result <==> !(this.next < this.elems.length);
- Specifications inherited from overridden method in interface IndefiniteIterator:
pure
get
public Object get()
- Description copied from interface:
IndefiniteIterator
- Return the current element in this iteration. This method may
be called multiple times, and does not advance the state of the
iterator when it is called. The idea is to permit several
similar copies to be returned (e.g., clones) each time it is
called.
- Specified by:
get
in interface IndefiniteIterator
- Specifications: pure nullable
- also
-
public normal_behavior
requires this.next < this.elems.length;
assignable \nothing;
- also
-
public exceptional_behavior
requires this.next >= this.elems.length;
assignable \nothing;
signals_only java.util.NoSuchElementException;
- Specifications inherited from overridden method in interface IndefiniteIterator:
pure nullable -
public behavior
assignable \nothing;
ensures_redundantly this.atEnd() == \old(this.atEnd());
signals (java.lang.Exception e) e instanceof java.util.NoSuchElementException&&this.atEnd();
duplicateIfNeeded
protected abstract Object duplicateIfNeeded(nullable Object elem)
- Duplicate the argument if needed. This is a hook for subclasses.
- Parameters:
elem
- the object to perhaps be duplicated, which may be null
- Specifications: pure spec_public nullable
-
public normal_behavior
assignable \nothing;
advance
public void advance()
- Description copied from interface:
IndefiniteIterator
- Advance the state of this iteration to the next position.
Note that this never throws an exception.
- Specified by:
advance
in interface IndefiniteIterator
- Specifications:
- also
-
public normal_behavior
requires this.next < this.elems.length;
assignable next;
ensures this.next == \old(this.next+1);
- also
-
public normal_behavior
requires this.next == this.elems.length;
assignable \nothing;
- Specifications inherited from overridden method in interface IndefiniteIterator:
-
public normal_behavior
assignable objectState;
clone
public Object clone()
- Description copied from interface:
IndefiniteIterator
- Return a copy of this iterator in the same state as this object.
- Specified by:
clone
in interface IndefiniteIterator
- Overrides:
clone
in class Object
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class Object:
non_null -
protected normal_behavior
requires this instanceof java.lang.Cloneable;
assignable \nothing;
ensures \result != null;
ensures \typeof(\result ) == \typeof(this);
ensures (* \result is a clone of this *);
- also
-
protected normal_behavior
requires this.getClass().isArray();
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((java.lang.Object[])\result ).length == ((java.lang.Object[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((java.lang.Object[])this).length; ((java.lang.Object[])\result )[i] == ((java.lang.Object[])this)[i]);
- also
-
requires this.getClass().isArray();
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures java.lang.reflect.Array.getLength(\result ) == java.lang.reflect.Array.getLength(this);
ensures ( \forall int i; 0 <= i&&i < java.lang.reflect.Array.getLength(this); ( \exists java.lang.Object result_i; result_i == java.lang.reflect.Array.get(\result ,i); (result_i == null&&java.lang.reflect.Array.get(this,i) == null)||(result_i != null&&result_i.equals(java.lang.reflect.Array.get(this,i)))));
- also
-
protected exceptional_behavior
requires !(this instanceof java.lang.Cloneable);
assignable \nothing;
signals_only java.lang.CloneNotSupportedException;
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) <: \type(java.lang.Object);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((java.lang.Object[])\result ).length == ((java.lang.Object[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((java.lang.Object[])this).length; ((java.lang.Object[])\result )[i] == ((java.lang.Object[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(int);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((int[])\result ).length == ((int[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((int[])this).length; ((int[])\result )[i] == ((int[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(byte);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((byte[])\result ).length == ((byte[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((byte[])this).length; ((byte[])\result )[i] == ((byte[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(char);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((char[])\result ).length == ((char[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((char[])this).length; ((char[])\result )[i] == ((char[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(long);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((long[])\result ).length == ((long[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((long[])this).length; ((long[])\result )[i] == ((long[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(short);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((short[])\result ).length == ((short[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((short[])this).length; ((short[])\result )[i] == ((short[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(boolean);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((boolean[])\result ).length == ((boolean[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((boolean[])this).length; ((boolean[])\result )[i] == ((boolean[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(float);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((float[])\result ).length == ((float[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((float[])this).length; (java.lang.Float.isNaN(((float[])\result )[i])&&java.lang.Float.isNaN(((float[])this)[i]))||((float[])\result )[i] == ((float[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(double);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((double[])\result ).length == ((double[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((double[])this).length; (java.lang.Double.isNaN(((double[])\result )[i])&&java.lang.Double.isNaN(((double[])this)[i]))||((double[])\result )[i] == ((double[])this)[i]);
- Specifications inherited from overridden method in interface IndefiniteIterator:
pure- also
-
public normal_behavior
assignable \nothing;
ensures \fresh(\result )&&\result instanceof org.jmlspecs.jmlunit.strategies.IndefiniteIterator;
ensures \result != this;
ensures_redundantly \result != null;
ensures ((org.jmlspecs.jmlunit.strategies.IndefiniteIterator)\result ).atEnd() == this.atEnd();
toString
public String toString()
- Overrides:
toString
in class Object
- Specifications inherited from overridden method in class Object:
non_null -
public normal_behavior
assignable objectState;
ensures \result != null&&\result .equals(this.theString);
ensures (* \result is a string representation of this object *);
- also
-
public code normal_behavior
assignable \nothing;
ensures \result != null&&(* \result is the instance's class name, followed by an @, followed by the instance's hashcode in hex *);
- also
-
public code model_program { ... }
- implies_that
-
assignable objectState;
ensures \result != null;
elementsString
protected String elementsString()
- Specifications: pure
-
ensures \result != null;
JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.