Convert TwoTerminal to a more general MultiTerminal in Circ.asy.
[course.git] / asymptote / Circ-test.asy
index 44bfc7cdca00d5853f063eef8e4f3860053f6e92..b57a643f79f07a8ae489204b234c77a8f52cc022 100644 (file)
@@ -1,6 +1,6 @@
 /* Test suite for Circ.asy.
  *
- * Copyright (C) 2008-2009 W. Trevor King <wking@drexel.edu>
+ * Copyright (C) 2008-2012 W. Trevor King <wking@drexel.edu>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,67 +22,80 @@ import Circ;
 real u = 2cm, v=0;
 
 write("resistor");
-TwoTerminal Rn = resistor((0,v), 0, normal, "$R_{normal}$", "30\ohm");
-dot("beg", Rn.beg, NW, red);
-dot("end", Rn.end, NE, red);
-dot("mid", Rn.mid, S, red);
-TwoTerminal Rvb = resistor((2u,v), 0, variable, "$R_{variable}$", "30\kohm");
+MultiTerminal Rn = resistor(beg=(0,v), dir=0, type=normal,
+    label=Label("$R_{normal}$", align=N), value=Label("$30\ohm$", align=S));
+dot("beg", Rn.terminal[0], NW, red);
+dot("end", Rn.terminal[1], NE, red);
+dot("center", Rn.center, S, red);
+
+MultiTerminal Rvb = resistor(beg=(2u,v), dir=0, type=variable,
+    label=Label("$R_{variable}$", align=NW),
+    value=Label("$30\kohm$", align=SE));
 v -= u;
 
 write("capacitor");
-TwoTerminal Cn = capacitor((0,v), 0, normal, "$C_{normal}$", "30 $\mu$F");
-TwoTerminal Ce = capacitor((u,v), 0, electrolytic, "$C_{electrolytic}$", "30 $\mu$F");
-TwoTerminal Cvb = capacitor((2u,v), 0, variable, "$C_{variable}$", "30 $\mu$F");
-TwoTerminal Cvt = capacitor((3u,v), 0, variant, "$C_{variant}$", "30 $\mu$F");
+MultiTerminal Cn = capacitor((0,v), type=normal, "$C_{normal}$",
+    "30 $\mu$F");
+MultiTerminal Ce = capacitor((u,v), type=electrolytic, "$C_{electrolytic}$",
+    "30 $\mu$F");
+MultiTerminal Cvb = capacitor((2u,v), type=variable, "$C_{variable}$",
+    "30 $\mu$F");
+MultiTerminal Cvt = capacitor((3u,v), type=variant, "$C_{variant}$",
+    "30 $\mu$F");
 v -= u;
 
 write("inductor");
-TwoTerminal Lup = inductor((0,v), 0, Up, "$L_{Up}$", "30 H");
-TwoTerminal Ldown = inductor((u,v), 0, Down, "$L_{Down}$", "30 H");
+MultiTerminal Lup = inductor((0,v), type=Up, "$L_{Up}$", "30 H");
+MultiTerminal Ldown = inductor((u,v), type=Down, "$L_{Down}$", "30 H");
 v -= u;
 
 write("diode");
-TwoTerminal Dn = diode((0,v), 0, normal, "$D_{normal}$", "1.3 V");
-TwoTerminal Dz = diode((u,v), 0, zener, "$D_{zener}$", "1.3 V");
-TwoTerminal Dled = diode((2u,v), 0, LED, "$D_{LED}$", "1.7 V");
+MultiTerminal Dn = diode((0,v), type=normal, "$D_{normal}$", "1.3 V");
+MultiTerminal Dz = diode((u,v), type=zener, "$D_{zener}$", "1.3 V");
+MultiTerminal Dled = diode((2u,v), type=LED, "$D_{LED}$", "1.7 V");
 v -= u;
 
 write("battery");
-TwoTerminal B = battery((0,v), 0, "Battery", "1.5 V");
+MultiTerminal B = battery((0,v), "Battery", "1.5 V");
 v -= u;
 
 write("switch");
-TwoTerminal B = switchSPST((0,v), 0, NO, "$S_{NO}$", "Open");
-TwoTerminal B = switchSPST((u,v), 0, NC, "$S_{NC}$", "Closed");
+MultiTerminal So = switchSPST((0,v), type=open, "$S$", "Open");
+MultiTerminal Sc = switchSPST((u,v), type=closed, "$S$", "Closed");
+MultiTerminal SPDT_o = switchSPDT((2u,v), type=open, "$S$", "Open");
+MultiTerminal SPDT_a = switchSPDT((3u,v), type=closed_a, "$S$", "Closed-A");
+MultiTerminal SPDT_b = switchSPDT((4u,v), type=closed_b, "$S$", "Closed-B");
 v -= u;
 
 write("current");
-TwoTerminal Icurr = current((0,v), 0, "I", "10 A");
+MultiTerminal Icurr = current((0,v), "I", "10 A");
 v -= u;
 
 write("source");
-TwoTerminal Sdc = source((0,v), 0, DC, "DC", "5 V");
-TwoTerminal Sac = source((u,v), 0, AC, "AC", "5 V$_{pp}$");
-TwoTerminal Si = source((2u,v), 0, I, "I", "5 A");
-TwoTerminal Sv = source((3u,v), 0, V, "V", "5 V");
+MultiTerminal Sdc = source((0,v), type=DC, "DC", "5 V");
+MultiTerminal Sac = source((u,v), type=AC, "AC", "5 V$_{pp}$");
+MultiTerminal Si = source((2u,v), type=I, "I", "5 A");
+MultiTerminal Sv = source((3u,v), type=V, "V", "5 V");
 v -= u;
 
 write("lamp");
-TwoTerminal Ln = lamp((0,v), 0, normal, "indicator", "5\ohm");
-TwoTerminal Li = lamp((u,v), 0, illuminating, "illuminator", "5\ohm");
+MultiTerminal Ln = lamp((0,v), 0, normal, "indicator", "5\ohm");
+MultiTerminal Li = lamp((u,v), 0, illuminating, "illuminator", "5\ohm");
 v -= 1.5u;
 
 write("positioning");
-TwoTerminal Spos = source((u,v), 90, DC, "DC", "5 V");
-TwoTerminal Rpos = resistor((0,0), 0, normal, "+offset", "5 \ohm", draw=false);
-Rpos.centerto(Spos.beg, Spos.end, offset=u);
+MultiTerminal Spos = source((u,v), dir=90, type=DC, "DC", "5 V");
+MultiTerminal Rpos = resistor(type=normal,
+    label=rotate(90)*Label("+offset", align=W),
+    value=rotate(90)*Label("5 \ohm", align=E), draw=false);
+Rpos.centerto(Spos.terminal[0], Spos.terminal[1], offset=u);
 Rpos.draw();
-dot("Sa", Spos.beg, S);
-dot("Sb", Spos.end, N);
-dot("Ra", Rpos.beg, S);
-dot("Rb", Rpos.end, N);
-TwoTerminal Cpos = capacitor((0,0), 0, normal, "-2offset", "4 F",draw=false);
-Cpos.centerto(Spos.beg, Spos.end, offset=-2u);
+dot("Sa", Spos.terminal[0], S);
+dot("Sb", Spos.terminal[1], N);
+dot("Ra", Rpos.terminal[0], S);
+dot("Rb", Rpos.terminal[1], N);
+MultiTerminal Cpos = capacitor(type=normal, "-2offset", "4 F",draw=false);
+Cpos.centerto(Spos.terminal[0], Spos.terminal[1], offset=-2u);
 Cpos.draw();
 v -= u;
 
@@ -106,17 +119,19 @@ v -= u;
 
 write("circuit");
 v -= u/2;  // this circuit takes up more height than the previous lines.
-TwoTerminal Ccirc = capacitor((0,v), ang=90);
-TwoTerminal Rcirc = resistor(draw=false);
-Rcirc.centerto(Ccirc.beg, Ccirc.end);
+MultiTerminal Ccirc = capacitor((0,v), dir=90);
+MultiTerminal Rcirc = resistor(draw=false);
+two_terminal_centerto(Ccirc, Rcirc);
 Rcirc.shift((u,0));  // gratuitous use of shift, but whatever...
 Rcirc.draw();
 // In the following, we assume the resistor is longer than the
 // capacitor.  If that is not true, you can find the corners of the
 // circuit programatically and use those corners.
-wire(Rcirc.end, Ccirc.end, rlsq);
-wire(Rcirc.beg, Ccirc.beg, rlsq);
-pair Pcirc[] = {(Ccirc.beg.x,Rcirc.beg.y), (Ccirc.end.x,Rcirc.end.y),
-               Rcirc.end, Rcirc.beg};
+wire(Rcirc.terminal[1], Ccirc.terminal[1], rlsq);
+wire(Rcirc.terminal[0], Ccirc.terminal[0], rlsq);
+pair Pcirc[] = {
+  (Ccirc.terminal[0].x,Rcirc.terminal[0].y),
+  (Ccirc.terminal[1].x,Rcirc.terminal[1].y),
+  Rcirc.terminal[1], Rcirc.terminal[0]};
 kirchhoff_loop(Pcirc);
 v -= u;