// Path: src/main/java/abra/ReadEvaluator.java
// static class Alignment {
// 	String chromosome;
// 	int pos;
// 	String cigar;
// 	Orientation orientation;
// 	int numMismatches;
// 		
// 	int contigPos;
// 	String contigCigar;
// 	boolean isSecondary;
// 		
// 	static final Alignment AMBIGUOUS = new Alignment();
// 		
// 	Alignment() {
// 	}
// 		
// 	Alignment(String chromosome, int pos, String cigar, Orientation orientation, int numMismatches, int contigPos, String contigCigar, boolean isSecondary) {
// 		this.chromosome = chromosome;
// 		this.pos = pos;
// 		this.cigar = cigar;
// 		this.orientation = orientation;
// 		this.numMismatches = numMismatches;
// 			
// 		this.contigPos = contigPos;
// 		this.contigCigar = contigCigar;
// 		this.isSecondary = isSecondary;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((cigar == null) ? 0 : cigar.hashCode());
// 		result = prime * result
// 				+ ((orientation == null) ? 0 : orientation.hashCode());
// 		result = prime * result + pos;
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		Alignment other = (Alignment) obj;
// 		if (cigar == null) {
// 			if (other.cigar != null)
// 				return false;
// 		} else if (!cigar.equals(other.cigar))
// 			return false;
// 		if (orientation != other.orientation)
// 			return false;
// 		if (pos != other.pos)
// 			return false;
// 		return true;
// 	}
// 
// }


import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import abra.ReadEvaluator.Alignment;
		String newCigar = CigarUtils.extendCigarWithMatches(cigar, 10, 15);
		assertEquals(newCigar, "60M10D65M");
		
		cigar = "100M";
		newCigar = CigarUtils.extendCigarWithMatches(cigar, 10, 15);
		assertEquals(newCigar, "125M");
	}
	
	@Test (groups = "unit")
	public void testInjectSplice() {
		String cigar = "90M5I5D205M";
		
		int junctionPos = 100;
		int junctionLength = 2000;
		String newCigar = CigarUtils.injectSplice(cigar, junctionPos, junctionLength);
		assertEquals(newCigar, "90M5I5D5M2000N200M");
	}
	
	@Test (groups = "unit")
	public void testInjectSplices() {
		String cigar = "90M5I5D205M";

		List<Integer> junctionPos = Arrays.asList(100, 125);
		List<Integer> junctionLength = Arrays.asList(2000, 50000);
		String newCigar = CigarUtils.injectSplices(cigar, junctionPos, junctionLength);
		assertEquals(newCigar, "90M5I5D5M2000N25M50000N175M");

	}
	
	private int testEquivalenceAndSelectIntronPreferred(String cigar1, String cigar2) {
// Path: src/main/java/abra/ReadEvaluator.java
// static class Alignment {
// 	String chromosome;
// 	int pos;
// 	String cigar;
// 	Orientation orientation;
// 	int numMismatches;
// 		
// 	int contigPos;
// 	String contigCigar;
// 	boolean isSecondary;
// 		
// 	static final Alignment AMBIGUOUS = new Alignment();
// 		
// 	Alignment() {
// 	}
// 		
// 	Alignment(String chromosome, int pos, String cigar, Orientation orientation, int numMismatches, int contigPos, String contigCigar, boolean isSecondary) {
// 		this.chromosome = chromosome;
// 		this.pos = pos;
// 		this.cigar = cigar;
// 		this.orientation = orientation;
// 		this.numMismatches = numMismatches;
// 			
// 		this.contigPos = contigPos;
// 		this.contigCigar = contigCigar;
// 		this.isSecondary = isSecondary;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((cigar == null) ? 0 : cigar.hashCode());
// 		result = prime * result
// 				+ ((orientation == null) ? 0 : orientation.hashCode());
// 		result = prime * result + pos;
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		Alignment other = (Alignment) obj;
// 		if (cigar == null) {
// 			if (other.cigar != null)
// 				return false;
// 		} else if (!cigar.equals(other.cigar))
// 			return false;
// 		if (orientation != other.orientation)
// 			return false;
// 		if (pos != other.pos)
// 			return false;
// 		return true;
// 	}
// 
// }


// Path: src/test/java/abra/CigarUtilsTest.java
import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import abra.ReadEvaluator.Alignment;

		String newCigar = CigarUtils.extendCigarWithMatches(cigar, 10, 15);
		assertEquals(newCigar, "60M10D65M");
		
		cigar = "100M";
		newCigar = CigarUtils.extendCigarWithMatches(cigar, 10, 15);
		assertEquals(newCigar, "125M");
	}
	
	@Test (groups = "unit")
	public void testInjectSplice() {
		String cigar = "90M5I5D205M";
		
		int junctionPos = 100;
		int junctionLength = 2000;
		String newCigar = CigarUtils.injectSplice(cigar, junctionPos, junctionLength);
		assertEquals(newCigar, "90M5I5D5M2000N200M");
	}
	
	@Test (groups = "unit")
	public void testInjectSplices() {
		String cigar = "90M5I5D205M";

		List<Integer> junctionPos = Arrays.asList(100, 125);
		List<Integer> junctionLength = Arrays.asList(2000, 50000);
		String newCigar = CigarUtils.injectSplices(cigar, junctionPos, junctionLength);
		assertEquals(newCigar, "90M5I5D5M2000N25M50000N175M");

	}
	
	private int testEquivalenceAndSelectIntronPreferred(String cigar1, String cigar2) {
		Alignment a1 = new Alignment();