package com.sun.electric.plugins.irsim;
import com.sun.electric.api.irsim.IAnalyzer;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest(String testName) {
super(testName);
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite(AppTest.class);
}
public void testIRSIM1() throws IOException {
int irDebug = 0;
String steppingModel = "RC";
URL parameterURL = AppTest.class.getResource("scmos0.3.prm");
boolean isDelayedX = true;
boolean showCommands = true;
IAnalyzer.EngineIRSIM x = new IAnalyzerImpl().createEngine(new FakeGUI(), steppingModel, parameterURL, irDebug, showCommands, isDelayedX);
x.putTransistor("net@29", "gnd", "net@1", 2.0, 3.5, 10.5, 13.0, 14.0, -17.75, true);
x.putTransistor("cc", "in", "net@29", 2.0, 5.0, 15.0, 16.0, 0.5, -18.5, true);
x.putTransistor("in", "gnd", "net@26", 2.0, 10.0, 30.0, 26.0, -21.5, -19.0, true);
x.putTransistor("net@1", "gnd", "out", 2.0, 20.0, 60.0, 46.0, 22.5, -25.5, true);
x.putTransistor("cc", "net@6", "net@26", 2.0, 5.0, 15.0, 16.0, -13.0, -16.5, true);
x.putTransistor("net@26", "gnd", "in", 2.0, 3.0, 9.0, 12.0, -8.5, -29.0, true);
x.putTransistor("cc", "net@29", "net@6", 2.0, 3.0, 9.0, 12.0, -1.0, 8.5, false);
x.putTransistor("in", "vdd", "net@26", 2.0, 10.0, 30.0, 26.0, -18.0, 12.0, false);
x.putTransistor("net@26", "in", "vdd", 2.0, 5.0, 15.0, 16.0, -21.0, 33.5, false);
x.putTransistor("in", "vdd", "net@6", 2.0, 5.0, 15.0, 16.0, -9.5, 9.5, false);
x.putTransistor("net@6", "vdd", "out", 2.0, 20.0, 60.0, 46.0, 12.0, 21.5, false);
x.putTransistor("net@6", "out", "vdd", 2.0, 20.0, 60.0, 46.0, 12.0, 29.5, false);
x.putTransistor("net@26", "net@29", "vdd", 2.0, 5.0, 15.0, 16.0, 7.5, 9.5, false);
x.putTransistor("net@29", "vdd", "net@1", 2.0, 6.0, 18.0, 18.0, 15.5, 9.0, false);
x.finishNetwork();
x.convertStimuli();
x.init();
x.clearAllVectors();
InputStreamReader reader = new InputStreamReader(AppTest.class.getResourceAsStream("IRSIM-1.cmd"));
x.restoreStimuli(reader);
reader.close();
}
public void testIRSIM2() throws IOException {
int irDebug = 0;
String steppingModel = "RC";
URL parameterURL = AppTest.class.getResource("scmos0.3.prm");
boolean isDelayedX = true;
boolean showCommands = true;
IAnalyzer.EngineIRSIM x = new IAnalyzerImpl().createEngine(new FakeGUI(), steppingModel, parameterURL, irDebug, showCommands, isDelayedX);
for (int i = 0; i < 12; i++) {
x.putTransistor("a[" + i + "]", "out[" + i + "]", "vdd", 2.0, 3.0, 9.0, 12.0, -197.5, 44.5, true);
x.putTransistor("b[" + i + "]", "vdd", "out[" + i + "]", 2.0, 3.0, 9.0, 12.0, -182.5, 44.5, true);
x.putTransistor("b[" + i + "]", "and@" + i + "/net@21", "gnd", 2.0, 3.0, 9.0, 12.0, -190.0, 12.0, false);
x.putTransistor("a[" + i + "]", "out[" + i + "]", "and@" + i + "/net@21", 2.0, 3.0, 9.0, 12.0, -190.0, 21.0, false);
}
x.finishNetwork();
x.convertStimuli();
x.init();
x.clearAllVectors();
InputStreamReader reader = new InputStreamReader(AppTest.class.getResourceAsStream("IRSIM-2.cmd"));
x.restoreStimuli(reader);
reader.close();
}
public void testIRSIM3() throws IOException {
int irDebug = 0;
String steppingModel = "RC";
URL parameterURL = AppTest.class.getResource("scmos0.3.prm");
boolean isDelayedX = true;
boolean showCommands = true;
IAnalyzer.EngineIRSIM x = new IAnalyzerImpl().createEngine(new FakeGUI(), steppingModel, parameterURL, irDebug, showCommands, isDelayedX);
InputStreamReader simReader = new InputStreamReader(AppTest.class.getResourceAsStream("IRSIM-3.sim"));
x.inputSim(simReader, "IRSIM-3.sim");
simReader.close();
double lambda = x.getLambda();
x.finishNetwork();
x.convertStimuli();
x.init();
x.clearAllVectors();
InputStreamReader reader = new InputStreamReader(AppTest.class.getResourceAsStream("IRSIM-3.cmd"));
x.restoreStimuli(reader);
reader.close();
}
private class FakeGUI implements IAnalyzer.GUI {
private List<TestSignal> signals = new ArrayList<TestSignal>();
public IAnalyzer.GuiSignal makeSignal(String name) {
// make a signal for it
TestSignal sig = new TestSignal(name, null);
signals.add(sig);
return sig;
}
public void makeBusSignals(List<IAnalyzer.GuiSignal> sigList) {
}
public void createBus(String busName, IAnalyzer.GuiSignal... subsigs) {
TestSignal sig = new TestSignal(busName, subsigs);
signals.add(sig);
}
public Collection<IAnalyzer.GuiSignal> getSignals() {
return Collections.<IAnalyzer.GuiSignal>unmodifiableCollection(signals);
}
public void setMainXPositionCursor(double curTime) {
System.out.println("gui.setMainXPositionCursor(" + curTime + ");");
}
public void openPanel(Collection<IAnalyzer.GuiSignal> sigs) {
System.out.print("gui.openPanel(");
for (IAnalyzer.GuiSignal sig : sigs) {
System.out.print(" " + sig.getFullName());
}
System.out.println(");");
}
public void closePanels() {
System.out.println("gui.closePanels();");
}
public double getMaxPanelTime() {
return Double.NEGATIVE_INFINITY;
}
public void repaint() {
System.out.println("gui.repaint();");
}
public char canonicChar(char c) {
return Character.toLowerCase(c);
}
public String canonicString(String s) {
return s.toLowerCase();
}
public double atof(String text) {
return Double.parseDouble(text);
}
public int atoi(String text) {
text = text.trim();
int v = 0;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c < '0' || c > '9') break;
v = v*10 + (c - '0');
}
return v;
}
public String formatDouble(double v) {
return Double.toString(v);
}
}
private class TestSignal implements IAnalyzer.GuiSignal {
private String fullName;
private IAnalyzer.GuiSignal[] busMembers;
private TestSignal(String fullName, IAnalyzer.GuiSignal[] busMembers) {
this.fullName = fullName;
this.busMembers = busMembers;
}
public String getFullName() {
return fullName;
}
public String getSignalName() {
return fullName;
}
public IAnalyzer.GuiSignal[] getBusMembers() {
return busMembers;
}
public void addControlPoint(double time) {
System.out.println("findSignal(\""+fullName+"\").addControlPoint("+time+");");
}
public void removeControlPoint(double time) {
System.out.println("findSignal(\""+fullName+"\").removeControlPoint("+time+");");
}
public void addSample(double t, IAnalyzer.LogicState v) {
// System.out.println("findSignal(\""+fullName+"\").addSample("+t+","+v+");");
}
}
}