import org.apache.tools.ant.DirectoryScanner; import org.cellocad.MIT.dnacompiler.*; import org.junit.Test; import java.io.File; import java.util.ArrayList; import java.util.HashMap; /** * Created by Bryan Der on 2/28/16. */ public class ReloadCircuitsTest { /** * This will reload and simulate >60 circuits */ //@Test public void reloadCircuits() { HashMap<String,String> correct_seq_map = new HashMap<>(); ArrayList<ArrayList<String>> correct_seqs = Util.fileTokenizer("resources/tested_circuits/circuit_DNA_sequences_v2.csv"); for(ArrayList<String> row: correct_seqs) { String name = row.get(0); String dnaseq = row.get(1); correct_seq_map.put(name, dnaseq); } System.out.println("reloadCircuits :: "); String baseDirectory = "resources/tested_circuits/"; DirectoryScanner scanner = new DirectoryScanner(); scanner.setBasedir(baseDirectory); scanner.scan(); String[] directory_names = scanner.getIncludedDirectories(); for(String directory: directory_names) { if(directory.isEmpty()) { continue; } System.out.println("directory: " + directory); String verilogFile = ""; String circuitFile = ""; File folder = new File(baseDirectory + directory); File[] listOfFiles = folder.listFiles(); for(File f: listOfFiles) { if(f.getName().endsWith(".v")) { verilogFile = f.getAbsolutePath(); } if(f.getName().endsWith("logic_circuit.txt")) { circuitFile = f.getAbsolutePath(); } } if(circuitFile.isEmpty()) { //System.out.println("Emtpy: " + directory); /** Emtpy: AIMPLYB Emtpy: AND Emtpy: ANIMPLYB Emtpy: BIMPLYA Emtpy: BNIMPLYA Emtpy: NAND Emtpy: XNOR Emtpy: XOR */ continue; } // else if(!circuitFile.contains("0x01")) { // continue; // } String options = "-histogram false " + "-figures false " + "-assignment_algorithm reload " + "-reload " + circuitFile + " " + "-verilog " + verilogFile + " " + "-jobID " + "circuit_" + directory + " " + "-output_directory " + baseDirectory + directory + "/ "; ArrayList<String> optList = Util.lineTokenizer(options); String[] optArr = new String[optList.size()]; optArr = optList.toArray(optArr); DNACompiler dnaCompiler = new DNACompiler(); dnaCompiler.run(optArr); LogicCircuit lc = dnaCompiler.get_logic_circuits().get(0); String correct_seq = correct_seq_map.get(directory); String fulldna = ""; for(ArrayList<Part> module: lc.get_circuit_module_parts()) { for (Part p : module) { //System.out.println(p.get_name() + ", " + p.get_seq()); if (p.get_type().equalsIgnoreCase("scar")) { String seq = correct_seq.substring(fulldna.length(), fulldna.length() + 4); p.set_seq(seq); } fulldna += p.get_seq(); if (!correct_seq.toUpperCase().startsWith(fulldna.toUpperCase())) { System.out.println("############# Problem with \n" + p.get_name() + " \n" + p.get_seq()); Integer length_last = p.get_seq().length(); String expected = correct_seq.substring(fulldna.length() - length_last, fulldna.length()); //System.out.println(expected); if(!directory.equals("0xB9")) { assert(false); } } else { //System.out.println("match " + p.get_name()); } } } if(!directory.equals("0xB9")) { assert(correct_seq.toUpperCase().startsWith(fulldna.toUpperCase())); } System.out.println("sequence, " + directory + ", " + fulldna); // System.out.println(correct_seq.length()); // System.out.println(fulldna.length()); // assert(correct_seq.length() == fulldna.length()); // assert(correct_seq.toUpperCase().equals(fulldna.toUpperCase())); // System.out.println(directory + ", " + fulldna); // System.out.println(correct_seq); // System.out.println(fulldna); // assert(best_lc.get_scores().get_score() > 10.0); // assert(Toxicity.mostToxicRow(best_lc) > 0.50); } } }