Skip to content

Commit 3f94dc8

Browse files
Merge pull request #54 from marcin-golebiowski/marcin-golebiowski/emit_removing_S
When an expression is long, there is a System.NotSupportedException
2 parents 526d19e + a7effd0 commit 3f94dc8

2 files changed

Lines changed: 32 additions & 15 deletions

File tree

SpiceSharpBehavioral/Builders/Functions/RealILState.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,25 @@ public override void Push(Node node)
7070
case NodeTypes.GreaterThan:
7171
Push(bn.Left);
7272
Push(bn.Right);
73-
PushCheck(OpCodes.Bgt_S, 1.0, 0.0);
73+
PushCheck(OpCodes.Bgt, 1.0, 0.0);
7474
return;
7575

7676
case NodeTypes.LessThan:
7777
Push(bn.Left);
7878
Push(bn.Right);
79-
PushCheck(OpCodes.Blt_S, 1.0, 0.0);
79+
PushCheck(OpCodes.Blt, 1.0, 0.0);
8080
return;
8181

8282
case NodeTypes.GreaterThanOrEqual:
8383
Push(bn.Left);
8484
Push(bn.Right);
85-
PushCheck(OpCodes.Bge_S, 1.0, 0.0);
85+
PushCheck(OpCodes.Bge, 1.0, 0.0);
8686
return;
8787

8888
case NodeTypes.LessThanOrEqual:
8989
Push(bn.Left);
9090
Push(bn.Right);
91-
PushCheck(OpCodes.Ble_S, 1.0, 0.0);
91+
PushCheck(OpCodes.Ble, 1.0, 0.0);
9292
return;
9393

9494
case NodeTypes.Equals:
@@ -97,7 +97,7 @@ public override void Push(Node node)
9797
Push(Builder.RelativeTolerance);
9898
Push(Builder.AbsoluteTolerance);
9999
Generator.Emit(OpCodes.Call, _equals);
100-
PushCheck(OpCodes.Brtrue_S, 1.0, 0.0);
100+
PushCheck(OpCodes.Brtrue, 1.0, 0.0);
101101
return;
102102

103103
case NodeTypes.NotEquals:
@@ -106,19 +106,19 @@ public override void Push(Node node)
106106
Push(Builder.RelativeTolerance);
107107
Push(Builder.AbsoluteTolerance);
108108
Generator.Emit(OpCodes.Call, _equals);
109-
PushCheck(OpCodes.Brfalse_S, 1.0, 0.0);
109+
PushCheck(OpCodes.Brfalse, 1.0, 0.0);
110110
return;
111111

112112
case NodeTypes.And:
113113
lblBypass = Generator.DefineLabel();
114114
lblEnd = Generator.DefineLabel();
115115

116116
Push(bn.Left); Push(0.5);
117-
Generator.Emit(OpCodes.Ble_S, lblBypass);
117+
Generator.Emit(OpCodes.Ble, lblBypass);
118118
Push(bn.Right); Push(0.5);
119-
Generator.Emit(OpCodes.Ble_S, lblBypass);
119+
Generator.Emit(OpCodes.Ble, lblBypass);
120120
Generator.Emit(OpCodes.Ldc_R8, 1.0);
121-
Generator.Emit(OpCodes.Br_S, lblEnd);
121+
Generator.Emit(OpCodes.Br, lblEnd);
122122
Generator.MarkLabel(lblBypass);
123123
Generator.Emit(OpCodes.Ldc_R8, 0.0);
124124
Generator.MarkLabel(lblEnd);
@@ -129,11 +129,11 @@ public override void Push(Node node)
129129
lblEnd = Generator.DefineLabel();
130130

131131
Push(bn.Left); Push(0.5);
132-
Generator.Emit(OpCodes.Bgt_S, lblBypass);
132+
Generator.Emit(OpCodes.Bgt, lblBypass);
133133
Push(bn.Right); Push(0.5);
134-
Generator.Emit(OpCodes.Bgt_S, lblBypass);
134+
Generator.Emit(OpCodes.Bgt, lblBypass);
135135
Generator.Emit(OpCodes.Ldc_R8, 0.0);
136-
Generator.Emit(OpCodes.Br_S, lblEnd);
136+
Generator.Emit(OpCodes.Br, lblEnd);
137137
Generator.MarkLabel(lblBypass);
138138
Generator.Emit(OpCodes.Ldc_R8, 1.0);
139139
Generator.MarkLabel(lblEnd);
@@ -166,7 +166,7 @@ public override void Push(Node node)
166166
case NodeTypes.Minus: Generator.Emit(OpCodes.Neg); return;
167167
case NodeTypes.Not:
168168
Push(0.5);
169-
PushCheck(OpCodes.Ble_S, 1.0, 0.0);
169+
PushCheck(OpCodes.Ble, 1.0, 0.0);
170170
return;
171171
}
172172
break;
@@ -191,9 +191,9 @@ public override void Push(Node node)
191191
lblBypass = Generator.DefineLabel();
192192
lblEnd = Generator.DefineLabel();
193193
Push(tn.Condition); Push(0.5);
194-
Generator.Emit(OpCodes.Ble_S, lblBypass);
194+
Generator.Emit(OpCodes.Ble, lblBypass);
195195
Push(tn.IfTrue);
196-
Generator.Emit(OpCodes.Br_S, lblEnd);
196+
Generator.Emit(OpCodes.Br, lblEnd);
197197
Generator.MarkLabel(lblBypass);
198198
Push(tn.IfFalse);
199199
Generator.MarkLabel(lblEnd);

SpiceSharpBehavioralTest/Components/BehavioralResistorTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,23 @@ namespace SpiceSharpBehavioralTest.Components
88
[TestFixture]
99
public class BehavioralResistorTests
1010
{
11+
[Test]
12+
public void When_ComplexResitor_Expect_Reference()
13+
{
14+
var ckt = new Circuit(
15+
new VoltageSource("V1", "2", "0", 0.5),
16+
new VoltageSource("V2", "1", "0", 10),
17+
new BehavioralResistor("RSwitch", "1", "0", "v(2, 0) >= 1 ? 10 : (v(2, 0) <= 0 ? 1000000 : (exp(8.05904782547916 + 3 * -11.5129254649702 * (v(2, 0)-0.5)/(2*1) - 2 * -11.5129254649702 * pow(v(2, 0)-0.5, 3)/(pow(1,3)))))"));
18+
var op = new OP("Voltage switch simulation");
19+
var refExport = new RealCurrentExport(op, "V2");
20+
op.ExportSimulationData += (sender, args) =>
21+
{
22+
Assert.AreEqual(-0.00316228, refExport.Value, 1e-8);
23+
};
24+
25+
op.Run(ckt);
26+
}
27+
1128
[Test]
1229
public void When_SimpleResistor_Expect_Reference()
1330
{

0 commit comments

Comments
 (0)