package org.nextprot.api.tasks.solr.indexer; import static org.junit.Assert.*; import org.junit.Test; import org.nextprot.api.tasks.solr.indexer.entry.impl.ChromosomeFieldBuilder; public class ChromosomeLocationSortOrderTest { @Test public void test1() { computeAndCheckValueFor("19q13.32"); } @Test public void test2() { computeAndCheckValueFor("19q13.32 1q13.32"); } @Test public void test31() { computeAndCheckValueFor("2p21"); } @Test public void test32() { computeAndCheckValueFor("2p21,"); } @Test public void test33() { computeAndCheckValueFor("2p21, 19q13.32, 14q32.11"); } @Test public void test4() { computeAndCheckValueFor("9q13.3"); } @Test public void test5() { computeAndCheckValueFor("19q13"); } @Test public void testStringBuilder() { StringBuilder sb = new StringBuilder(); sb.append("123xx"); int start = sb.length()-2; sb.delete(start, start+2); assertEquals("123", sb.toString()); } public void computeAndCheckValueFor(String positions) { Integer actualValue = ChromosomeFieldBuilder.sortChr(positions); Integer expectedValue = new Long(sortChrOld(positions)).intValue(); System.out.println("order value for " + positions + " : expected " + expectedValue + " - got " + actualValue); assertEquals(expectedValue, actualValue); } // method used in old implementation in nextmodel svn project public long sortChrOld(String chrs) { // base the computation of chr_loc_s on first chr_loc String chr = chrs.split(" ")[0]; chr=chr.trim(); System.out.println("old method: value of chr_loc before computation of chr_loc_s: " + chr); String[] chr_loc=chr.split("([pq]|cen)"); // split on p or q long f_chr0=1000000; long f_q=50000; long f_chr1=1000; int max_chr=50; // max chr localtion after pq long chr0, chr1; // push unknown chromosome at the end if (chr.indexOf("unknown")>-1 || chr.equals("")) { //System.out.println(f_chr0*30+ " = "+chr); return f_chr0*30; } if(chr_loc[0].equalsIgnoreCase("x")){ chr0=23*f_chr0; }else if(chr_loc[0].equalsIgnoreCase("y")) { chr0=24*f_chr0; }else if(chr_loc[0].equalsIgnoreCase("mt")) { chr0=25*f_chr0; }else{ chr0=Integer.parseInt(chr_loc[0])*f_chr0; } System.out.println("step1: chr0="+chr0); // // sort(cen) = 10E5*XX + 10E4-1 if (chr.indexOf("cen")>-1){ //System.out.println(chr+" = "+(chr0+f_q-1)); return chr0+f_q-1; } // // sort(chr) = 10E5*XX if (chr_loc.length==1){ //System.out.println(chr+" = "+(chr0)); return (chr0); } // extract double value from digits after p or q chr1=(long)( Double.parseDouble(chr_loc[1].split("[-,]")[0]) * f_chr1); System.out.println("step2: chr1="+chr1); // sort(q) = 10E5*XX + 10E4 + 100*YY if(chr.indexOf('q')>-1){ //System.out.println(chr+" = "+(chr0+chr1+f_q)); System.out.println("step3: has q"); return chr0+chr1+f_q; } // sort(p) = 10E6*XX + 1000*(45-YY) //descending order //System.out.println(chr+" = "+(chr0 + f_chr1 * max_chr - chr1)); return chr0 + f_chr1 * max_chr - chr1; } }