// Path: game-common/src/main/java/com/game/common/model/Entity.java
// public abstract class Entity extends Observable {
// 
// 	public abstract Hash getID();
// 	public abstract Point getLocation();
// 	public abstract void setLocation(Point p);
// 
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Hash.java
// public class Hash implements Comparable<Hash>, Serializable {
// 	private static final Logger log = LoggerFactory.getLogger(Hash.class);
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final int LENGTH = 20; // in bytes
// 	public static final String ALGORITHM = "SHA-1";
// 
// 	protected static MessageDigest digest;
// 
// 	static {
// 		try {
// 			digest = MessageDigest.getInstance(ALGORITHM);
// 		}
// 		catch (NoSuchAlgorithmException e) {
// 			log.error("No such hashing algorithm: " + ALGORITHM);
// 			System.exit(1); // fatal error
// 		}
// 	}
// 
// 	public static Hash fromString(String hex) {
// 		Hash hash = new Hash();
// 		hash.setHex(hex);
// 
// 		return hash;
// 	}
// 
// 	public static Hash fromBytes(byte[] bytes) {
// 		Hash hash = new Hash();
// 		hash.setBytes(bytes);
// 
// 		return hash;
// 	}
// 
// 	protected String hex;
// 
// 	public Hash(String str) {
// 		try {
// 			digest.update(str.getBytes("UTF-8"));
// 		}
// 		catch (UnsupportedEncodingException e) { }
// 
// 		this.setBytes(digest.digest());
// 	}
// 
// 	private Hash() {
// 		hex = null;
// 	}
// 
// 	private void setHex(String hex) {
// 		this.hex = hex;
// 	}
// 
// 	private void setBytes(byte[] bytes) {
// 		Formatter foramtter = new Formatter();
// 
// 		for (byte b : bytes)
// 			foramtter.format("%02x", b);
// 
// 		this.hex = foramtter.toString();
// 	}
// 
// 	public byte[] getBytes() {
// 		byte[] bytes = new byte[LENGTH];
// 
// 		for (int i = 0;i < LENGTH;i++)
// 			bytes[i] = (byte) Short.parseShort(hex.substring(2 * i, 2 * (i + 1)), 16);
// 
// 		return bytes;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return hex;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return hex.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Hash))
// 			return false;
// 
// 		Hash h = (Hash) o;
// 		return hex.equals(h.hex);
// 	}
// 
// 	@Override
// 	public int compareTo(Hash h) {
// 		return hex.compareTo(h.hex);
// 	}
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Point.java
// public class Point implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final Point ZERO = new Point(0, 0);
// 
// 	public int x;
// 	public int y;
// 
// 	@SuppressWarnings("unused")
// 	private Point() { } // For hibernate
// 
// 	public Point(int x, int y) {
// 		this.x = x;
// 		this.y = y;
// 	}
// 
// 	public void set(Point location) {
// 		this.x = location.x;
// 		this.y = location.y;
// 	}
// 
// 	public double distanceTo(Point p) {
// 		// Euclidean distance
// 		return Math.sqrt(Math.pow(this.x - p.x, 2) + Math.pow(this.y - p.y, 2));
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return x << 16 | y;
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Point))
// 			return false;
// 
// 		Point p = (Point) o;
// 		return x == p.x && y == p.y;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "(" + x + ", " + y + ")";
// 	}
// }


import junit.framework.TestCase;
import com.game.common.model.Entity;
import com.game.common.model.Hash;
import com.game.common.model.Point;
package com.game.common.util;



public class EntityListTest extends TestCase {

	private static class TestEntity extends Entity {

		protected final Hash id;

		public TestEntity(String str) {
			id = new Hash(str);
		}

		@Override
		public Hash getID() {
			return id;
		}

		@Override
// Path: game-common/src/main/java/com/game/common/model/Entity.java
// public abstract class Entity extends Observable {
// 
// 	public abstract Hash getID();
// 	public abstract Point getLocation();
// 	public abstract void setLocation(Point p);
// 
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Hash.java
// public class Hash implements Comparable<Hash>, Serializable {
// 	private static final Logger log = LoggerFactory.getLogger(Hash.class);
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final int LENGTH = 20; // in bytes
// 	public static final String ALGORITHM = "SHA-1";
// 
// 	protected static MessageDigest digest;
// 
// 	static {
// 		try {
// 			digest = MessageDigest.getInstance(ALGORITHM);
// 		}
// 		catch (NoSuchAlgorithmException e) {
// 			log.error("No such hashing algorithm: " + ALGORITHM);
// 			System.exit(1); // fatal error
// 		}
// 	}
// 
// 	public static Hash fromString(String hex) {
// 		Hash hash = new Hash();
// 		hash.setHex(hex);
// 
// 		return hash;
// 	}
// 
// 	public static Hash fromBytes(byte[] bytes) {
// 		Hash hash = new Hash();
// 		hash.setBytes(bytes);
// 
// 		return hash;
// 	}
// 
// 	protected String hex;
// 
// 	public Hash(String str) {
// 		try {
// 			digest.update(str.getBytes("UTF-8"));
// 		}
// 		catch (UnsupportedEncodingException e) { }
// 
// 		this.setBytes(digest.digest());
// 	}
// 
// 	private Hash() {
// 		hex = null;
// 	}
// 
// 	private void setHex(String hex) {
// 		this.hex = hex;
// 	}
// 
// 	private void setBytes(byte[] bytes) {
// 		Formatter foramtter = new Formatter();
// 
// 		for (byte b : bytes)
// 			foramtter.format("%02x", b);
// 
// 		this.hex = foramtter.toString();
// 	}
// 
// 	public byte[] getBytes() {
// 		byte[] bytes = new byte[LENGTH];
// 
// 		for (int i = 0;i < LENGTH;i++)
// 			bytes[i] = (byte) Short.parseShort(hex.substring(2 * i, 2 * (i + 1)), 16);
// 
// 		return bytes;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return hex;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return hex.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Hash))
// 			return false;
// 
// 		Hash h = (Hash) o;
// 		return hex.equals(h.hex);
// 	}
// 
// 	@Override
// 	public int compareTo(Hash h) {
// 		return hex.compareTo(h.hex);
// 	}
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Point.java
// public class Point implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final Point ZERO = new Point(0, 0);
// 
// 	public int x;
// 	public int y;
// 
// 	@SuppressWarnings("unused")
// 	private Point() { } // For hibernate
// 
// 	public Point(int x, int y) {
// 		this.x = x;
// 		this.y = y;
// 	}
// 
// 	public void set(Point location) {
// 		this.x = location.x;
// 		this.y = location.y;
// 	}
// 
// 	public double distanceTo(Point p) {
// 		// Euclidean distance
// 		return Math.sqrt(Math.pow(this.x - p.x, 2) + Math.pow(this.y - p.y, 2));
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return x << 16 | y;
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Point))
// 			return false;
// 
// 		Point p = (Point) o;
// 		return x == p.x && y == p.y;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "(" + x + ", " + y + ")";
// 	}
// }


// Path: game-common/src/test/java/com/game/common/util/EntityListTest.java
import junit.framework.TestCase;
import com.game.common.model.Entity;
import com.game.common.model.Hash;
import com.game.common.model.Point;

package com.game.common.util;



public class EntityListTest extends TestCase {

	private static class TestEntity extends Entity {

		protected final Hash id;

		public TestEntity(String str) {
			id = new Hash(str);
		}

		@Override
		public Hash getID() {
			return id;
		}

		@Override
		public Point getLocation() {