/******************************************************************************
 * Copyright (c) 2002 - 2008 IBM Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *****************************************************************************/
abstract class PrimitiveWrapper {
    
  /**
   * Sets the integer representation of the underlying primitive
   * to the given value.
   * @effects this.intVal' = i
   */
  public abstract void setIntValue(int i);
    
  /**
   * Returns the integer representation of the underlying primitive.
   * @return this.intVal
   */
  public abstract int intValue();
	
  /**
   * Returns true if this and the given object are 
   * pri
   * {@inheritDoc}
   * @see java.lang.Object#equals(java.lang.Object)
   */
  abstract public boolean equals(Object o);
}

final class IntWrapper extends PrimitiveWrapper {
  private int val;
	
  /**
   * Constructs a wrapper for the given int.
   * @effects this.intVal' = val
   */
  public IntWrapper(int val) { 
    this.val = val;
  }
	
  /**
   * {@inheritDoc}
   * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#intValue()
   */
  public int intValue() {
    return val;
  }

  /**
   * {@inheritDoc}
   * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#setIntValue(int)
   */
  public void setIntValue(int i) {
    this.val = i;
  }
	
  /**
   * {@inheritDoc}
   * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#equals(java.lang.Object)
   */
  public boolean equals(Object o) { 
    return o instanceof IntWrapper && ((IntWrapper)o).val==val;
  }
}

public class MiniaturSliceBug {

  public void validNonDispatchedCall(IntWrapper wrapper) { 
    wrapper.setIntValue(3);
    assert wrapper.intValue() == 3;
    wrapper.equals(wrapper);
  }

  public static void main(String[] args) {
    (new MiniaturSliceBug()).validNonDispatchedCall(new IntWrapper(-1));
  }

}