// Path: unsafe-tests/src/main/java/net/bramp/unsafe/examples/FourLongs.java
// public class FourLongs implements Comparable<FourLongs> {
//   public long a, b, c, d;
// 
//   public FourLongs() {
//     this(0, 0, 0, 0);
//   }
// 
//   /**
//    * Creates a new FourLongs.
//    *
//    * @param a 1st field
//    * @param b 2nd field
//    * @param c 3rd field
//    * @param d 4th field
//    */
//   public FourLongs(long a, long b, long c, long d) {
//     this.a = a;
//     this.b = b;
//     this.c = c;
//     this.d = d;
//   }
// 
//   @Override public String toString() {
//     return "FourLongs{" +
//         "a=0x" + Long.toHexString(a) + ", " +
//         "b=0x" + Long.toHexString(b) + ", " +
//         "c=0x" + Long.toHexString(c) + ", " +
//         "d=0x" + Long.toHexString(d) + '}';
//   }
// 
//   @Override public boolean equals(Object obj) {
//     if (this == obj) {
//       return true;
//     }
//     if (obj == null || getClass() != obj.getClass()) {
//       return false;
//     }
//     FourLongs fourLongs = (FourLongs) obj;
//     return Objects.equal(a, fourLongs.a)
//         && Objects.equal(b, fourLongs.b)
//         && Objects.equal(c, fourLongs.c)
//         && Objects.equal(d, fourLongs.d);
//   }
// 
//   @Override public int hashCode() {
//     return Objects.hashCode(a, b, c, d);
//   }
// 
//   @Override public int compareTo(FourLongs obj) {
//     return ComparisonChain.start()
//         .compare(a, obj.a)
//         .compare(b, obj.b)
//         .compare(c, obj.c)
//         .compare(d, obj.d)
//         .result();
//   }
// }
// 
// Path: unsafe-tests/src/main/java/net/bramp/unsafe/examples/UnalignedClass.java
// public class UnalignedClass implements Comparable<UnalignedClass> {
//   public final char c;
// 
//   public UnalignedClass(char c) {
//     this.c = c;
//   }
// 
//   public UnalignedClass(int i) {
//     this.c = (char)i;
//   }
// 
//   @Override
//   public String toString() {
//     return "UnalignedClass{c=" + (int)c + "}";
//   }
// 
//   @Override
//   public int compareTo(UnalignedClass obj) {
//     return ComparisonChain.start().compare(c, obj.c).result();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     return obj instanceof UnalignedClass && c == ((UnalignedClass)obj).c;
//   }
// }
// 
// Path: unsafe-helper/src/main/java/net/bramp/unsafe/UnsafeHelper.java
// public static long firstFieldOffset(Object obj) {
//   return firstFieldOffset(obj.getClass());
// }
// 
// Path: unsafe-helper/src/main/java/net/bramp/unsafe/UnsafeHelper.java
// public static long sizeOfFields(Object obj) {
//   return sizeOfFields(obj.getClass());
// }


import net.bramp.unsafe.examples.FourLongs;
import net.bramp.unsafe.examples.UnalignedClass;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import sun.misc.Unsafe;
import java.lang.reflect.InvocationTargetException;
import static net.bramp.unsafe.UnsafeHelper.firstFieldOffset;
import static net.bramp.unsafe.UnsafeHelper.sizeOfFields;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
package net.bramp.unsafe;




/**
 * TODO Test the write doesn't overrun or underun
 */
public abstract class AbstractUnsafeCopierTest {

  final static Unsafe unsafe = UnsafeHelper.getUnsafe();
// Path: unsafe-tests/src/main/java/net/bramp/unsafe/examples/FourLongs.java
// public class FourLongs implements Comparable<FourLongs> {
//   public long a, b, c, d;
// 
//   public FourLongs() {
//     this(0, 0, 0, 0);
//   }
// 
//   /**
//    * Creates a new FourLongs.
//    *
//    * @param a 1st field
//    * @param b 2nd field
//    * @param c 3rd field
//    * @param d 4th field
//    */
//   public FourLongs(long a, long b, long c, long d) {
//     this.a = a;
//     this.b = b;
//     this.c = c;
//     this.d = d;
//   }
// 
//   @Override public String toString() {
//     return "FourLongs{" +
//         "a=0x" + Long.toHexString(a) + ", " +
//         "b=0x" + Long.toHexString(b) + ", " +
//         "c=0x" + Long.toHexString(c) + ", " +
//         "d=0x" + Long.toHexString(d) + '}';
//   }
// 
//   @Override public boolean equals(Object obj) {
//     if (this == obj) {
//       return true;
//     }
//     if (obj == null || getClass() != obj.getClass()) {
//       return false;
//     }
//     FourLongs fourLongs = (FourLongs) obj;
//     return Objects.equal(a, fourLongs.a)
//         && Objects.equal(b, fourLongs.b)
//         && Objects.equal(c, fourLongs.c)
//         && Objects.equal(d, fourLongs.d);
//   }
// 
//   @Override public int hashCode() {
//     return Objects.hashCode(a, b, c, d);
//   }
// 
//   @Override public int compareTo(FourLongs obj) {
//     return ComparisonChain.start()
//         .compare(a, obj.a)
//         .compare(b, obj.b)
//         .compare(c, obj.c)
//         .compare(d, obj.d)
//         .result();
//   }
// }
// 
// Path: unsafe-tests/src/main/java/net/bramp/unsafe/examples/UnalignedClass.java
// public class UnalignedClass implements Comparable<UnalignedClass> {
//   public final char c;
// 
//   public UnalignedClass(char c) {
//     this.c = c;
//   }
// 
//   public UnalignedClass(int i) {
//     this.c = (char)i;
//   }
// 
//   @Override
//   public String toString() {
//     return "UnalignedClass{c=" + (int)c + "}";
//   }
// 
//   @Override
//   public int compareTo(UnalignedClass obj) {
//     return ComparisonChain.start().compare(c, obj.c).result();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     return obj instanceof UnalignedClass && c == ((UnalignedClass)obj).c;
//   }
// }
// 
// Path: unsafe-helper/src/main/java/net/bramp/unsafe/UnsafeHelper.java
// public static long firstFieldOffset(Object obj) {
//   return firstFieldOffset(obj.getClass());
// }
// 
// Path: unsafe-helper/src/main/java/net/bramp/unsafe/UnsafeHelper.java
// public static long sizeOfFields(Object obj) {
//   return sizeOfFields(obj.getClass());
// }


// Path: unsafe-unroller/src/test/java/net/bramp/unsafe/AbstractUnsafeCopierTest.java
import net.bramp.unsafe.examples.FourLongs;
import net.bramp.unsafe.examples.UnalignedClass;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import sun.misc.Unsafe;
import java.lang.reflect.InvocationTargetException;
import static net.bramp.unsafe.UnsafeHelper.firstFieldOffset;
import static net.bramp.unsafe.UnsafeHelper.sizeOfFields;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

package net.bramp.unsafe;




/**
 * TODO Test the write doesn't overrun or underun
 */
public abstract class AbstractUnsafeCopierTest {

  final static Unsafe unsafe = UnsafeHelper.getUnsafe();
  final static long fourLongOffset = firstFieldOffset(FourLongs.class);