summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRuben Undheim <ruben.undheim@gmail.com>2018-07-13 06:17:58 +0000
committerRuben Undheim <ruben.undheim@gmail.com>2018-07-13 06:17:58 +0000
commit9e0bd16a997e55d6b9c2e80734ea8e61794c7602 (patch)
treed73377e0368b0c730d5a14019b1eee53897505bf /test
parente1fffcb07ce0d8b0db9e0b4b5e1e0c1128197af5 (diff)
New upstream version 0.84.22
Diffstat (limited to 'test')
-rw-r--r--test/files/bug-102-raw-minimal.oregano51
-rw-r--r--test/files/bug-102-raw.oregano150
-rw-r--r--test/files/bug-102.oregano770
-rw-r--r--test/files/bug-115-simple.oregano82
-rw-r--r--test/files/bug-115.oregano287
-rw-r--r--test/files/bug-116.oregano129
-rw-r--r--test/files/bug-117.oregano432
-rw-r--r--test/files/bug-130.oregano49
-rw-r--r--test/files/bug-93.oregano93
-rw-r--r--test/files/old-not-snapped.oregano511
-rw-r--r--test/files/test_engine_ngspice - memory leak analysis.txt105
-rw-r--r--test/helper.c14
-rw-r--r--test/test-files/test_engine_ngspice_watcher/basic/input.netlist24
-rw-r--r--test/test-files/test_engine_ngspice_watcher/basic/result/actual.txt0
-rw-r--r--test/test-files/test_engine_ngspice_watcher/basic/result/expected.txt1176
-rw-r--r--test/test-files/test_engine_ngspice_watcher/error/step_zero/input.netlist24
-rw-r--r--test/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt0
-rw-r--r--test/test-files/test_engine_ngspice_watcher/error/step_zero/result/expected.txt5
-rw-r--r--test/test.c45
-rw-r--r--test/test_engine.c33
-rw-r--r--test/test_engine_ngspice.c223
-rw-r--r--test/test_nodestore.c65
-rw-r--r--test/test_thread_pipe.c398
-rw-r--r--test/test_update_connection_designators.c315
-rw-r--r--test/test_wire.c99
-rw-r--r--test/wscript18
26 files changed, 5098 insertions, 0 deletions
diff --git a/test/files/bug-102-raw-minimal.oregano b/test/files/bug-102-raw-minimal.oregano
new file mode 100644
index 0000000..c1c9d3e
--- /dev/null
+++ b/test/files/bug-102-raw-minimal.oregano
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>bug-102-raw-minimal.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts/>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(620 90)(620 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(580 550)(580 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(600 550)(600 90)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-102-raw.oregano b/test/files/bug-102-raw.oregano
new file mode 100644
index 0000000..8ef3088
--- /dev/null
+++ b/test/files/bug-102-raw.oregano
@@ -0,0 +1,150 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>bug-102-raw.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts/>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(630 550)(630 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(620 90)(620 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(610 550)(610 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(600 90)(600 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(590 550)(590 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(580 90)(580 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(570 550)(570 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(560 90)(560 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(550 540)(550 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(540 90)(540 540)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(530 540)(530 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(520 80)(520 540)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(510 540)(510 80)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(500 90)(500 540)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(490 550)(490 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(480 90)(480 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(470 550)(470 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(460 90)(460 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(450 550)(450 90)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(440 100)(440 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(430 550)(430 100)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(420 100)(420 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 550)(410 100)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(400 110)(400 550)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(390 540)(390 110)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(380 130)(380 540)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(370 530)(370 130)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(360 150)(360 530)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(350 150)(350 540)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(330 150)(330 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(320 150)(320 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(300 150)(300 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 150)(280 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(290 150)(290 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 150)(310 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(640 90)(640 450)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-102.oregano b/test/files/bug-102.oregano
new file mode 100644
index 0000000..4bca7a9
--- /dev/null
+++ b/test/files/bug-102.oregano
@@ -0,0 +1,770 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>fliprottest.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>180</ogo:rotation>
+ <ogo:flip>vertical</ogo:flip>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(1045 260)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V2</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>180</ogo:rotation>
+ <ogo:flip>horizontal</ogo:flip>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(1125 360)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V8</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:flip>horizontal</ogo:flip>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(700 270)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V7</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(510 270)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V6</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>180</ogo:rotation>
+ <ogo:flip>horizontal</ogo:flip>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(575 390)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V5</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>180</ogo:rotation>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(765 390)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V4</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>180</ogo:rotation>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(1095 360)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V3</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>270</ogo:rotation>
+ <ogo:name>12AX7 (a)</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(1112.5 312.5)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>12AX7A(a)</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(310 190)(1420 190)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1420 190)(1420 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1420 200)(310 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 200)(310 210)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 210)(1420 210)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1420 210)(1420 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1420 230)(1410 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1410 230)(1410 220)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1410 220)(310 220)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 220)(310 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 230)(1400 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1400 230)(1400 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1400 250)(1400 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1400 260)(1390 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1390 260)(1390 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1390 250)(1390 240)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1390 240)(310 240)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 240)(310 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 250)(1380 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1380 250)(1380 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1380 260)(310 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 260)(310 270)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 270)(1450 270)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 270)(1450 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 280)(310 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 280)(310 290)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 290)(1450 290)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 290)(1450 300)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 300)(310 300)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 300)(310 310)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 310)(1450 310)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 310)(1450 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 320)(310 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 320)(310 330)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 330)(1450 330)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 330)(1450 340)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 340)(310 340)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 340)(310 350)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 350)(1450 350)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 350)(1450 360)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 360)(310 360)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 360)(310 370)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 370)(1450 370)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 370)(1450 380)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 380)(310 380)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 380)(310 390)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 390)(1450 390)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 390)(1450 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 400)(310 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 400)(310 410)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 410)(1450 410)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 410)(1450 420)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 420)(310 420)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 420)(310 430)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 430)(1450 430)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 430)(1450 440)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 440)(310 440)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 440)(310 450)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 450)(1450 450)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 450)(1450 460)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 460)(310 460)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 460)(310 470)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 470)(1450 470)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 470)(1450 480)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 480)(310 480)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 480)(310 490)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 490)(1450 490)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 490)(1450 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 500)(310 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 500)(310 510)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 510)(1450 510)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 510)(1450 520)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(1450 520)(310 520)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-115-simple.oregano b/test/files/bug-115-simple.oregano
new file mode 100644
index 0000000..047a1fe
--- /dev/null
+++ b/test/files/bug-115-simple.oregano
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>(null)</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>(null)</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Resistor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>resistor</ogo:symbol>
+ <ogo:position>(520 350)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>R1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Res</ogo:name>
+ <ogo:value>1k</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>R_@refdes %1 %2 @res</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Resistance</ogo:name>
+ <ogo:text>@res</ogo:text>
+ <ogo:position>(0 37)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(510 390)(510 460)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(510 350)(510 230)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-115.oregano b/test/files/bug-115.oregano
new file mode 100644
index 0000000..b437d6d
--- /dev/null
+++ b/test/files/bug-115.oregano
@@ -0,0 +1,287 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>bug-115.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Test Clamp</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Clamp</ogo:symbol>
+ <ogo:position>(280 220)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>internal</ogo:name>
+ <ogo:value>clamp</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>type</ogo:name>
+ <ogo:value>v</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>ac_type</ogo:name>
+ <ogo:value>m</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>ac_db</ogo:name>
+ <ogo:value>false</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels/>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>VDC</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>VDC</ogo:symbol>
+ <ogo:position>(270 110)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>VKK1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>1.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %+ %- dc @DC</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(25 10)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Gnd</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Ground</ogo:symbol>
+ <ogo:position>(260 320)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>internal</ogo:name>
+ <ogo:value>ground</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels/>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Resistor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>resistor</ogo:symbol>
+ <ogo:position>(180 240)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>R1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Res</ogo:name>
+ <ogo:value>1k</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>R_@refdes %1 %2 @res</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Resistance</ogo:name>
+ <ogo:text>@res</ogo:text>
+ <ogo:position>(0 30)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>BJT NPN</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>NPN</ogo:symbol>
+ <ogo:position>(260 230)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>Q1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>NPN10</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>Q_@refdes %c %b %e @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(0 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(30 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>VSIN</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>VSIN</ogo:symbol>
+ <ogo:position>(120 280)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>1.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>1.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %+ %- dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 10)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Resistor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>resistor</ogo:symbol>
+ <ogo:position>(290 170)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>RK1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Res</ogo:name>
+ <ogo:value>1k</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>R_@refdes %1 %2 @res</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Resistance</ogo:name>
+ <ogo:text>@res</ogo:text>
+ <ogo:position>(0 30)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(340 100)(340 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 100)(340 100)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 110)(280 100)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 150)(280 170)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 210)(280 220)</ogo:points>
+ <ogo:points>(280 220)(280 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(130 320)(280 320)</ogo:points>
+ <ogo:points>(280 320)(260 320)</ogo:points>
+ <ogo:points>(260 320)(340 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 250)(260 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(130 250)(180 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(130 250)(130 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(280 270)(280 320)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-116.oregano b/test/files/bug-116.oregano
new file mode 100644
index 0000000..6e7c5c4
--- /dev/null
+++ b/test/files/bug-116.oregano
@@ -0,0 +1,129 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>(null)</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>(null)</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>BJT PNP-PHOTO</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>PNP-PHOTO</ogo:symbol>
+ <ogo:position>(550 290)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>Q1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>PNP-PHOTO</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>Q_@refdes %c %b %e @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(0 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(30 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>AC Power 110V</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>power110</ogo:symbol>
+ <ogo:position>(460 290)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>110.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>60.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %1 %2 %3 dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(10 -20)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>60 Hz</ogo:text>
+ <ogo:position>(30 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>V</ogo:name>
+ <ogo:text>110 V</ogo:text>
+ <ogo:position>(30 -25)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires/>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-117.oregano b/test/files/bug-117.oregano
new file mode 100644
index 0000000..c86f975
--- /dev/null
+++ b/test/files/bug-117.oregano
@@ -0,0 +1,432 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>part_pin_test_field.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>(null)</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>VCCS</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>VCCS</ogo:symbol>
+ <ogo:position>(810 260)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>G1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Transconductance</ogo:name>
+ <ogo:value>1.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>NCP</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>NCN</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>G_@refdes %+ %- @ncp @ncn @transconductance</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Controlling voltage</ogo:name>
+ <ogo:text>@transconductance V ( @ncp , @ncn )</ogo:text>
+ <ogo:position>(15 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>AC Power 110V</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>power110</ogo:symbol>
+ <ogo:position>(700 330)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V2</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>110.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>60.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %1 %2 %3 dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(10 -20)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>60 Hz</ogo:text>
+ <ogo:position>(30 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>V</ogo:name>
+ <ogo:text>110 V</ogo:text>
+ <ogo:position>(30 -25)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Valve Triode + Heating</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>Triode</ogo:symbol>
+ <ogo:position>(390 340)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V4</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>Triode Type</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>XV_@refdes %c %g %p %h1 %h2 %h3 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -27)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>p</ogo:name>
+ <ogo:text>1</ogo:text>
+ <ogo:position>(34 -29)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>g</ogo:name>
+ <ogo:text>2</ogo:text>
+ <ogo:position>(5 -2)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>c</ogo:name>
+ <ogo:text>3</ogo:text>
+ <ogo:position>(62 30)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h1</ogo:name>
+ <ogo:text>4</ogo:text>
+ <ogo:position>(23 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h2</ogo:name>
+ <ogo:text>9</ogo:text>
+ <ogo:position>(33 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>h3</ogo:name>
+ <ogo:text>5</ogo:text>
+ <ogo:position>(43 38)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(45 -27)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Diode Bridge</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>bridge-d</ogo:symbol>
+ <ogo:position>(500 410)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>D1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>Diode Bridge</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>X_@refdes %1 %2 %3 %4 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(-10 -15)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(30 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>AC Power 110V</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>power110</ogo:symbol>
+ <ogo:position>(740 430)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V3</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>110.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>60.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %1 %2 %3 dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(10 -20)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>60 Hz</ogo:text>
+ <ogo:position>(30 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>V</ogo:name>
+ <ogo:text>110 V</ogo:text>
+ <ogo:position>(30 -25)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>AC Power 110V</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>power110</ogo:symbol>
+ <ogo:position>(620 340)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>110.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>60.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %1 %2 %3 dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(10 -20)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>60 Hz</ogo:text>
+ <ogo:position>(30 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>V</ogo:name>
+ <ogo:text>110 V</ogo:text>
+ <ogo:position>(30 -25)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(860 220)(220 220)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 230)(860 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 260)(220 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 270)(860 270)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 280)(220 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 290)(860 290)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 300)(220 300)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 310)(860 310)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 320)(220 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 340)(860 340)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 350)(220 350)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 360)(860 360)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 370)(220 370)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 380)(860 380)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 390)(220 390)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 400)(860 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 420)(220 420)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 430)(860 430)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 460)(220 460)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 450)(860 450)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(860 480)(220 480)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 440)(860 440)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 500)(860 500)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 490)(860 490)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 330)(860 330)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 210)(860 210)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 240)(860 240)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 410)(860 410)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 250)(860 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(220 470)(860 470)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-130.oregano b/test/files/bug-130.oregano
new file mode 100644
index 0000000..3b24158
--- /dev/null
+++ b/test/files/bug-130.oregano
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="https://beerbach.me/project/oregano/ns/v1">
+ <ogo:author>bernhard</ogo:author>
+ <ogo:title>bug-130.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts/>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(540 150)(540 220)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 220)(540 220)</ogo:points>
+ <ogo:points>(540 220)(620 220)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/bug-93.oregano b/test/files/bug-93.oregano
new file mode 100644
index 0000000..0b5755c
--- /dev/null
+++ b/test/files/bug-93.oregano
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>(null)</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>(null)</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts/>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(320 200)(300 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(340 200)(320 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(350 200)(340 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(400 200)(350 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(470 200)(400 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(550 200)(470 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(490 200)(550 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(400 200)(490 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(360 200)(400 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(320 200)(360 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(670 200)(320 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(350 200)(670 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(330 200)(350 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(520 200)(330 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(310 200)(520 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(690 200)(310 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(230 200)(690 200)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/old-not-snapped.oregano b/test/files/old-not-snapped.oregano
new file mode 100644
index 0000000..5b56e1c
--- /dev/null
+++ b/test/files/old-not-snapped.oregano
@@ -0,0 +1,511 @@
+<?xml version="1.0"?>
+<ogo:schematic xmlns:ogo="http://www.dtek.chalmers.se/~d4hult/oregano/v1">
+ <ogo:author/>
+ <ogo:title>rotation-text.oregano</ogo:title>
+ <ogo:comments/>
+ <ogo:grid>
+ <ogo:visible>true</ogo:visible>
+ <ogo:snap>true</ogo:snap>
+ </ogo:grid>
+ <ogo:simulation-settings>
+ <ogo:transient>
+ <ogo:enabled>true</ogo:enabled>
+ <ogo:start>0</ogo:start>
+ <ogo:stop>0.005</ogo:stop>
+ <ogo:step>0.0001</ogo:step>
+ <ogo:step-enabled>false</ogo:step-enabled>
+ <ogo:init-conditions>false</ogo:init-conditions>
+ </ogo:transient>
+ <ogo:ac>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:npoints>50</ogo:npoints>
+ <ogo:start>1</ogo:start>
+ <ogo:stop>1e+06</ogo:stop>
+ </ogo:ac>
+ <ogo:dc-sweep>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:vsrc1/>
+ <ogo:start1>0</ogo:start1>
+ <ogo:stop1>0</ogo:stop1>
+ <ogo:step1>0</ogo:step1>
+ </ogo:dc-sweep>
+ <ogo:fourier>
+ <ogo:enabled>false</ogo:enabled>
+ <ogo:freq>0</ogo:freq>
+ <ogo:vout>0</ogo:vout>
+ </ogo:fourier>
+ </ogo:simulation-settings>
+ <ogo:parts>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>BJT PNP-DAR</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>PNP-D</ogo:symbol>
+ <ogo:position>(580 250)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>Q1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>PNP</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>Q_@refdes %c %b %e @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(0 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(-20 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>AC Power 110V</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>power110</ogo:symbol>
+ <ogo:position>(630 240)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>V1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Offset</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Amplitude</ogo:name>
+ <ogo:value>110.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:value>60.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>DC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>AC</ogo:name>
+ <ogo:value>0.0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>V_@refdes %1 %2 %3 dc @dc ac @ac sin(@Offset @Amplitude @Frequency 0 0)</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(10 -20)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>60 Hz</ogo:text>
+ <ogo:position>(30 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>V</ogo:name>
+ <ogo:text>110 V</ogo:text>
+ <ogo:position>(30 -25)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Crystal</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>crystal</ogo:symbol>
+ <ogo:position>(710 250)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>X1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Freq</ogo:name>
+ <ogo:value>3.58MHz</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>X_@refdes %1 %2 @freq</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Frequency</ogo:name>
+ <ogo:text>@freq</ogo:text>
+ <ogo:position>(15 30)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Diode Tunnel</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>d_tunnel</ogo:symbol>
+ <ogo:position>(450 270)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>D1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Model</ogo:name>
+ <ogo:value>tunneldiode</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>D_@refdes %1 %2 @model</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(0 35)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Model</ogo:name>
+ <ogo:text>@model</ogo:text>
+ <ogo:position>(-5 -5)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Capacitor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>capacitor</ogo:symbol>
+ <ogo:position>(842.5 332.5)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>C5</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Cap</ogo:name>
+ <ogo:value>1u</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>IC</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>C_@refdes %1 %2 @cap IC=@IC</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Capacitance</ogo:name>
+ <ogo:text>@cap</ogo:text>
+ <ogo:position>(15 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Capacitor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>capacitor</ogo:symbol>
+ <ogo:position>(842.5 302.5)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>C4</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Cap</ogo:name>
+ <ogo:value>1u</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>IC</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>C_@refdes %1 %2 @cap IC=@IC</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Capacitance</ogo:name>
+ <ogo:text>@cap</ogo:text>
+ <ogo:position>(15 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Capacitor Pol.</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>cpol</ogo:symbol>
+ <ogo:position>(513 223)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>C3</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Cap</ogo:name>
+ <ogo:value>1u</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>C_@refdes %1 %2 @cap</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 0)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Capacitance</ogo:name>
+ <ogo:text>@cap</ogo:text>
+ <ogo:position>(15 30)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>0</ogo:rotation>
+ <ogo:name>Antenna</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>antenna</ogo:symbol>
+ <ogo:position>(570 160)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>internal</ogo:name>
+ <ogo:value>antenna</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels/>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>89</ogo:rotation>
+ <ogo:name>Capacitor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>capacitor</ogo:symbol>
+ <ogo:position>(692.237 362.371)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>C2</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Cap</ogo:name>
+ <ogo:value>1u</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>IC</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>C_@refdes %1 %2 @cap IC=@IC</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Capacitance</ogo:name>
+ <ogo:text>@cap</ogo:text>
+ <ogo:position>(15 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ <ogo:part>
+ <ogo:rotation>90</ogo:rotation>
+ <ogo:name>Capacitor</ogo:name>
+ <ogo:library>Default</ogo:library>
+ <ogo:symbol>capacitor</ogo:symbol>
+ <ogo:position>(672.5 282.5)</ogo:position>
+ <ogo:properties>
+ <ogo:property>
+ <ogo:name>Refdes</ogo:name>
+ <ogo:value>C1</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Cap</ogo:name>
+ <ogo:value>1u</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>IC</ogo:name>
+ <ogo:value>0</ogo:value>
+ </ogo:property>
+ <ogo:property>
+ <ogo:name>Template</ogo:name>
+ <ogo:value>C_@refdes %1 %2 @cap IC=@IC</ogo:value>
+ </ogo:property>
+ </ogo:properties>
+ <ogo:labels>
+ <ogo:label>
+ <ogo:name>Reference designator</ogo:name>
+ <ogo:text>@refdes</ogo:text>
+ <ogo:position>(15 -10)</ogo:position>
+ </ogo:label>
+ <ogo:label>
+ <ogo:name>Capacitance</ogo:name>
+ <ogo:text>@cap</ogo:text>
+ <ogo:position>(15 40)</ogo:position>
+ </ogo:label>
+ </ogo:labels>
+ </ogo:part>
+ </ogo:parts>
+ <ogo:wires>
+ <ogo:wire>
+ <ogo:points>(370 190)(700 190)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(700 190)(700 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(400 200)(690 200)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(690 200)(690 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 210)(680 210)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(680 210)(680 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 220)(670 220)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(670 220)(670 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(660 400)(660 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(660 230)(410 230)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(650 400)(650 240)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(650 240)(410 240)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(640 400)(640 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(640 250)(410 250)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(630 400)(630 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(630 260)(410 260)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 260)(410 270)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 270)(620 270)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(620 270)(620 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(620 400)(610 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(610 400)(610 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(610 280)(410 280)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 280)(410 290)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 290)(600 290)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(600 290)(600 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(600 400)(590 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(590 400)(590 300)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(590 300)(410 300)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 300)(410 310)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 310)(580 310)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(580 310)(580 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(580 400)(570 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(570 400)(570 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(570 320)(410 320)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 320)(410 330)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(410 330)(560 330)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(560 330)(560 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(560 400)(550 400)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(550 400)(550 340)</ogo:points>
+ </ogo:wire>
+ <ogo:wire>
+ <ogo:points>(550 340)(410 340)</ogo:points>
+ </ogo:wire>
+ </ogo:wires>
+ <ogo:textboxes/>
+</ogo:schematic>
diff --git a/test/files/test_engine_ngspice - memory leak analysis.txt b/test/files/test_engine_ngspice - memory leak analysis.txt
new file mode 100644
index 0000000..598be5d
--- /dev/null
+++ b/test/files/test_engine_ngspice - memory leak analysis.txt
@@ -0,0 +1,105 @@
+momory leak analysis
+====================
+
+using netlist of file tryProgressBar.oregano as input
+
+
+static memory consumption
+-------------------------
+
+1232 bytes oregano_spice_new
+272 bytes g_main_loop_new
+
+
+
+t_end = 2.5e-9
+consumption after 0 cycles: 190075
+consumption after 1 cycle : 212171
+consumption after 2 cycles: 222007
+consumption after 3 cycles: 233859
+consumption after 4 cycles: 245679
+consumption after 5 cycles: 255515
+consumption after 6 cycles: 265351
+consumption after 7 cycles: 275187
+consumption after 8 cycles: 285023
+consumption after 9 cycles: 295867
+consumption after 10 cycles: 306695
+
+delta:
+0-1 22096
+1-2 9836
+2-3 11852
+3-4 11820
+4-5 9836
+5-6 9836
+6-7 9836
+7-8 9836
+8-9 10844
+9-10 10828
+
+t_end = 2.5e-8
+consumption after 0 cycles: 190075
+consumption after 1 cycle : 212171
+consumption after 2 cycles: 222007
+consumption after 3 cycles: 233859
+consumption after 4 cycles: 245679
+consumption after 5 cycles: 255515
+consumption after 6 cycles: 265351
+consumption after 7 cycles: 275187
+consumption after 8 cycles: 284527
+consumption after 9 cycles: 295371
+consumption after 10 cycles: 305703
+
+delta:
+0-1 22096
+1-2 9836
+2-3 11852
+3-4 11820
+4-5 9836
+5-6 9836
+6-7 9836
+7-8 9340
+8-9 10844
+9-10 10332
+
+
+now we know that there is no memory leak in
+data computation. We know that there are
+leaks in the software architecture configuraion
+
+
+using g_thread_unref
+
+t_end = 2.5e-9
+consumption after 0 cycles: 190075
+consumption after 10 cycles: 296615
+
+using g_main_loop_unref
+
+t_end = 2.5e-9
+consumption after 0 cycles: 190075
+consumption after 10 cycles: 296455
+
+using g_main_context_unref
+
+t_end = 2.5e-9
+consumption after 0 cycles: 190075
+consumption after 10 cycles: 289655
+
+using g_source_unref for channel listener
+using g_io_channel_unref
+using g_io_channel_set_close_on_unref
+
+t_end = 2.5e-9
+consumption after 0 cycles: 190075
+consumption after 1 cycles: 203231
+consumption after 2 cycles: 203231
+consumption after 3 cycles: 204239
+consumption after 4 cycles: 206223
+consumption after 5 cycles: 206223
+consumption after 6 cycles: 206223
+consumption after 7 cycles: 206223
+consumption after 8 cycles: 206223
+consumption after 9 cycles: 205215
+consumption after 10 cycles: 205215
+
diff --git a/test/helper.c b/test/helper.c
new file mode 100644
index 0000000..863df97
--- /dev/null
+++ b/test/helper.c
@@ -0,0 +1,14 @@
+#include <glib.h>
+
+static gchar* get_test_base_dir() {
+ g_autofree gchar *cwd = g_get_current_dir();
+
+ g_autofree gchar *test_file = g_strdup_printf("%s/test/test.c", cwd);
+ while (!g_file_test(test_file, G_FILE_TEST_EXISTS)) {
+ gchar **split = g_regex_split_simple("\\/*(?:.(?!\\/))+$", cwd, 0, 0);
+ cwd = g_strdup(*split);
+ g_strfreev(split);
+ test_file = g_strdup_printf("%s/test/test.c", cwd);
+ }
+ return g_strdup_printf("%s/test", cwd);
+}
diff --git a/test/test-files/test_engine_ngspice_watcher/basic/input.netlist b/test/test-files/test_engine_ngspice_watcher/basic/input.netlist
new file mode 100644
index 0000000..bc2bc3f
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/basic/input.netlist
@@ -0,0 +1,24 @@
+* /home/michi/tryProgressBar.oregano
+*----------------------------------------------
+* ngspice - NETLIST
+.options OUT=120
+*------------- Models -------------------------
+.include /usr/local/share/oregano/models/1N4148.model
+*------------- Circuit Description-------------
+V_V3 5 1 dc 0
+R_R1 3 0 10k
+D_D1 5 3 D1N4148
+S1 1 0 2 0 M_S1
+.model M_S1 sw(VT=20 VH=0.0 RON=0.1 ROFF=100G)
+V_V2 2 0 dc 0.0 ac 0.0 PULSE -5 25 0.0 0 0 1.0u 10u
+L_L1 4 1 300uH
+V_V1 4 0 dc 20
+C_C1 3 0 100u IC=60
+
+*----------------------------------------------
+.tran 1.000000e-11 2.500000e-09 0.000000e+00 uic
+.print tran all
+
+.op
+
+.END \ No newline at end of file
diff --git a/test/test-files/test_engine_ngspice_watcher/basic/result/actual.txt b/test/test-files/test_engine_ngspice_watcher/basic/result/actual.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/basic/result/actual.txt
diff --git a/test/test-files/test_engine_ngspice_watcher/basic/result/expected.txt b/test/test-files/test_engine_ngspice_watcher/basic/result/expected.txt
new file mode 100644
index 0000000..d2c3d21
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/basic/result/expected.txt
@@ -0,0 +1,1176 @@
+
+Circuit: * /home/michi/tryprogressbar.oregano
+
+Doing analysis at TEMP = 27.000000 and TNOM = 27.000000
+
+
+No. of Data Rows : 1
+
+Initial Transient Solution
+--------------------------
+
+Node Voltage
+---- -------
+5 0
+1 0
+3 0
+2 0
+4 0
+l_l1#branch 0
+v_v1#branch 0
+v_v2#branch 0
+v_v3#branch 0
+
+
+No. of Data Rows : 284
+ Node Voltage
+ ---- -------
+ ---- -------
+ V(4) 2.000000e+01
+ V(2) 0.000000e+00
+ V(3) 1.934065e+01
+ V(1) 2.000000e+01
+ V(5) 2.000000e+01
+
+ Source Current
+ ------ -------
+
+ v_v3#branch -1.93406e-03
+ v_v2#branch 0.000000e+00
+ v_v1#branch -1.93406e-03
+ l_l1#branch 1.934065e-03
+
+ Capacitor models (Fixed capacitor)
+ model C
+
+ cap 0
+ cj 0
+ cjsw 0
+ defw 1e-05
+ defl 0
+ narrow 0
+ short 0
+ del 0
+ tc1 0
+ tc2 0
+ di 0
+ thick 0
+ bv_max 1e+99
+
+ Diode models (Junction Diode model)
+ model d1n4148
+
+ level 1
+ is 1e-13
+ jsw 0
+ rs 16
+ trs 0
+ trs2 0
+ n 1
+ ns 1
+ tt 1.2e-08
+ ttt1 0
+ ttt2 0
+ cjo 2e-12
+ vj 1
+ m 0.5
+ tm1 0
+ tm2 0
+ cjp 0
+ php 1
+ mjsw 0.33
+ ikf 0
+ ikr 0
+ nbv 1
+ area 1
+ pj 0
+ tlev 0
+ tlevc 0
+ eg 1.11
+ xti 3
+ cta 0
+ ctp 0
+ ctp 0
+ tpb 0
+ tphp 0
+ jtun 0
+ jtunsw 0
+ ntun 30
+ xtitun 3
+ keg 1
+ kf 0
+ af 1
+ fc 0.5
+ fcs 0.5
+ bv 100
+ ibv 3.867e-10
+ tcv 0
+ fv_max 1e+99
+ bv_max 1e+99
+
+ Inductor models (Fixed inductor)
+ model L
+
+ ind 0
+ tc1 0
+ tc2 0
+ csect 0
+ length 0
+ nt 0
+ mu 0
+
+ Resistor models (Simple linear resistor)
+ model R
+
+ rsh 0
+ narrow 0
+ short 0
+ tc1 0
+ tc2 0
+ defw 1e-05
+ l 1e-05
+ kf 0
+ af 0
+ r 0
+ bv_max 1e+99
+
+ Switch models (Ideal voltage controlled switch)
+ model m_s1
+
+
+ Capacitor: Fixed capacitor
+ device c_c1
+ model C
+capacitance 0.0001
+ cap 0.0001
+ c 0.0001
+ dtemp 0
+ bv_max 1e+99
+ i -0.00599982
+ p -0.359989
+
+ Diode: Junction Diode model
+ device d_d1
+ model d1n4148
+ vd -60
+ id 1.66255e-09
+ gd 0.103611
+ cd 2.56074e-13
+
+ Inductor: Fixed inductor
+ device l_l1
+ model L
+ inductance 0.0003
+ dtemp 0
+ nt 0
+ flux 4.94978e-08
+ v 20
+ i 0.000164993
+ p 0.00329985
+
+ Resistor: Simple linear resistor
+ device r_r1
+ model R
+ resistance 10000
+ ac 10000
+ dtemp 0
+ bv_max 1e+99
+ noisy 1
+ i 0.006
+ p 0.36
+
+ Switch: Ideal voltage controlled switch
+ device s1
+ model m_s1
+ i 0.000164991
+ p 2.72221e-09
+
+ Vsource: Independent voltage source
+ device v_v1 v_v2 v_v3
+ dc 20 0 0
+ acmag 0 0 0
+ pulse - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ sine - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ sin - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ exp - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ pwl - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ sffm - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ am - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ trnoise - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ trrandom - -5 -
+ 25
+ 0
+ 0
+ 0
+ 1e-06
+ 1e-05
+ i -0.000164993 0 -1.66255e-09
+ p 0.00329986 -0 0
+
+ * /home/michi/tryprogressbar.oregano
+ Transient Analysis Fri Jun 9 21:36:56 2017
+--------------------------------------------------------------------------------
+Index time V(1) V(2) V(3)
+--------------------------------------------------------------------------------
+0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
+1 1.000000e-13 6.000000e+01 -4.70000e+00 6.000000e+01
+2 2.000000e-13 6.000000e+01 -4.40000e+00 6.000000e+01
+3 4.000000e-13 6.000000e+01 -3.80000e+00 6.000000e+01
+4 8.000000e-13 6.000000e+01 -2.60000e+00 6.000000e+01
+5 1.600000e-12 6.000000e+01 -2.00000e-01 6.000000e+01
+6 3.200000e-12 5.999999e+01 4.600000e+00 6.000000e+01
+7 4.666667e-12 5.999999e+01 9.000000e+00 6.000000e+01
+8 5.358333e-12 5.999999e+01 1.107500e+01 6.000000e+01
+9 6.568750e-12 5.999998e+01 1.470625e+01 6.000000e+01
+10 6.903776e-12 5.999998e+01 1.571133e+01 6.000000e+01
+11 7.490072e-12 5.999998e+01 1.747021e+01 6.000000e+01
+12 7.652350e-12 5.999998e+01 1.795705e+01 6.000000e+01
+13 7.936337e-12 5.999998e+01 1.880901e+01 6.000000e+01
+14 8.014940e-12 5.999998e+01 1.904482e+01 6.000000e+01
+15 8.152496e-12 5.999998e+01 1.945749e+01 6.000000e+01
+16 8.190570e-12 5.999998e+01 1.957171e+01 6.000000e+01
+17 8.257199e-12 5.999998e+01 1.977160e+01 6.000000e+01
+18 8.275641e-12 5.999998e+01 1.982692e+01 6.000000e+01
+19 8.307914e-12 5.999998e+01 1.992374e+01 6.000000e+01
+20 8.339341e-12 3.724889e-01 2.001802e+01 6.000000e+01
+21 8.368989e-12 3.721389e-01 2.010697e+01 6.000000e+01
+22 8.415783e-12 3.715661e-01 2.024735e+01 6.000000e+01
+23 8.462595e-12 3.709686e-01 2.038778e+01 6.000000e+01
+24 8.556218e-12 3.697067e-01 2.066865e+01 6.000000e+01
+25 8.743465e-12 3.669207e-01 2.123039e+01 6.000000e+01
+26 9.117958e-12 3.603499e-01 2.235387e+01 6.000000e+01
+27 9.866944e-12 3.436482e-01 2.460083e+01 6.000000e+01
+28 1.000000e-11 3.402226e-01 2.500000e+01 6.000000e+01
+29 1.014980e-11 3.362220e-01 2.500000e+01 6.000000e+01
+30 1.044939e-11 3.277442e-01 2.500000e+01 6.000000e+01
+31 1.104858e-11 3.093324e-01 2.500000e+01 6.000000e+01
+32 1.224696e-11 2.687330e-01 2.500000e+01 6.000000e+01
+33 1.464371e-11 1.860234e-01 2.500000e+01 6.000000e+01
+34 1.943722e-11 6.687593e-02 2.500000e+01 6.000000e+01
+35 2.680459e-11 5.465349e-03 2.500000e+01 6.000000e+01
+36 3.505704e-11 7.712940e-06 2.500000e+01 6.000000e+01
+37 4.505704e-11 -6.02386e-07 2.500000e+01 6.000000e+01
+38 5.505704e-11 2.702691e-07 2.500000e+01 6.000000e+01
+39 6.505704e-11 2.593860e-07 2.500000e+01 6.000000e+01
+40 7.505704e-11 3.334843e-07 2.500000e+01 6.000000e+01
+41 8.505704e-11 3.994362e-07 2.500000e+01 6.000000e+01
+42 9.505704e-11 4.661716e-07 2.500000e+01 6.000000e+01
+43 1.050570e-10 5.328316e-07 2.500000e+01 6.000000e+01
+44 1.150570e-10 5.994989e-07 2.500000e+01 6.000000e+01
+45 1.250570e-10 6.661655e-07 2.500000e+01 6.000000e+01
+46 1.350570e-10 7.328321e-07 2.500000e+01 6.000000e+01
+47 1.450570e-10 7.994989e-07 2.500000e+01 6.000000e+01
+48 1.550570e-10 8.661655e-07 2.500000e+01 6.000000e+01
+49 1.650570e-10 9.328322e-07 2.500000e+01 6.000000e+01
+50 1.750570e-10 9.994988e-07 2.500000e+01 6.000000e+01
+51 1.850570e-10 1.066166e-06 2.500000e+01 6.000000e+01
+52 1.950570e-10 1.132832e-06 2.500000e+01 6.000000e+01
+53 2.050570e-10 1.199499e-06 2.500000e+01 6.000000e+01
+54 2.150570e-10 1.266165e-06 2.500000e+01 6.000000e+01
+
+Index time V(1) V(2) V(3)
+--------------------------------------------------------------------------------
+55 2.250570e-10 1.332832e-06 2.500000e+01 6.000000e+01
+56 2.350570e-10 1.399499e-06 2.500000e+01 6.000000e+01
+57 2.450570e-10 1.466165e-06 2.500000e+01 6.000000e+01
+58 2.550570e-10 1.532832e-06 2.500000e+01 6.000000e+01
+59 2.650570e-10 1.599499e-06 2.500000e+01 6.000000e+01
+60 2.750570e-10 1.666165e-06 2.500000e+01 6.000000e+01
+61 2.850570e-10 1.732832e-06 2.500000e+01 6.000000e+01
+62 2.950570e-10 1.799499e-06 2.500000e+01 6.000000e+01
+63 3.050570e-10 1.866165e-06 2.500000e+01 6.000000e+01
+64 3.150570e-10 1.932832e-06 2.500000e+01 6.000000e+01
+65 3.250570e-10 1.999499e-06 2.500000e+01 6.000000e+01
+66 3.350570e-10 2.066165e-06 2.500000e+01 6.000000e+01
+67 3.450570e-10 2.132832e-06 2.500000e+01 6.000000e+01
+68 3.550570e-10 2.199499e-06 2.500000e+01 6.000000e+01
+69 3.650570e-10 2.266165e-06 2.500000e+01 6.000000e+01
+70 3.750570e-10 2.332832e-06 2.500000e+01 6.000000e+01
+71 3.850570e-10 2.399499e-06 2.500000e+01 6.000000e+01
+72 3.950570e-10 2.466165e-06 2.500000e+01 6.000000e+01
+73 4.050570e-10 2.532832e-06 2.500000e+01 6.000000e+01
+74 4.150570e-10 2.599499e-06 2.500000e+01 6.000000e+01
+75 4.250570e-10 2.666166e-06 2.500000e+01 6.000000e+01
+76 4.350570e-10 2.732832e-06 2.500000e+01 6.000000e+01
+77 4.450570e-10 2.799499e-06 2.500000e+01 6.000000e+01
+78 4.550570e-10 2.866166e-06 2.500000e+01 6.000000e+01
+79 4.650570e-10 2.932832e-06 2.500000e+01 6.000000e+01
+80 4.750570e-10 2.999499e-06 2.500000e+01 6.000000e+01
+81 4.850570e-10 3.066165e-06 2.500000e+01 6.000000e+01
+82 4.950570e-10 3.132832e-06 2.500000e+01 6.000000e+01
+83 5.050570e-10 3.199498e-06 2.500000e+01 6.000000e+01
+84 5.150570e-10 3.266165e-06 2.500000e+01 6.000000e+01
+85 5.250570e-10 3.332832e-06 2.500000e+01 6.000000e+01
+86 5.350570e-10 3.399499e-06 2.500000e+01 6.000000e+01
+87 5.450570e-10 3.466166e-06 2.500000e+01 6.000000e+01
+88 5.550570e-10 3.532832e-06 2.500000e+01 6.000000e+01
+89 5.650570e-10 3.599499e-06 2.500000e+01 6.000000e+01
+90 5.750570e-10 3.666165e-06 2.500000e+01 6.000000e+01
+91 5.850570e-10 3.732832e-06 2.500000e+01 6.000000e+01
+92 5.950570e-10 3.799498e-06 2.500000e+01 6.000000e+01
+93 6.050570e-10 3.866165e-06 2.500000e+01 6.000000e+01
+94 6.150570e-10 3.932832e-06 2.500000e+01 6.000000e+01
+95 6.250570e-10 3.999498e-06 2.500000e+01 6.000000e+01
+96 6.350570e-10 4.066165e-06 2.500000e+01 6.000000e+01
+97 6.450570e-10 4.132832e-06 2.500000e+01 6.000000e+01
+98 6.550570e-10 4.199499e-06 2.500000e+01 6.000000e+01
+99 6.650570e-10 4.266165e-06 2.500000e+01 6.000000e+01
+100 6.750570e-10 4.332832e-06 2.500000e+01 6.000000e+01
+101 6.850570e-10 4.399498e-06 2.500000e+01 6.000000e+01
+102 6.950570e-10 4.466165e-06 2.500000e+01 6.000000e+01
+103 7.050570e-10 4.532832e-06 2.500000e+01 6.000000e+01
+104 7.150570e-10 4.599498e-06 2.500000e+01 6.000000e+01
+105 7.250570e-10 4.666165e-06 2.500000e+01 6.000000e+01
+106 7.350570e-10 4.732832e-06 2.500000e+01 6.000000e+01
+107 7.450570e-10 4.799499e-06 2.500000e+01 6.000000e+01
+108 7.550570e-10 4.866165e-06 2.500000e+01 6.000000e+01
+109 7.650570e-10 4.932831e-06 2.500000e+01 6.000000e+01
+110 7.750570e-10 4.999498e-06 2.500000e+01 6.000000e+01
+111 7.850570e-10 5.066164e-06 2.500000e+01 6.000000e+01
+112 7.950570e-10 5.132831e-06 2.500000e+01 6.000000e+01
+
+Index time V(1) V(2) V(3)
+--------------------------------------------------------------------------------
+113 8.050570e-10 5.199498e-06 2.500000e+01 6.000000e+01
+114 8.150570e-10 5.266165e-06 2.500000e+01 6.000000e+01
+115 8.250570e-10 5.332831e-06 2.500000e+01 6.000000e+01
+116 8.350570e-10 5.399498e-06 2.500000e+01 6.000000e+01
+117 8.450570e-10 5.466165e-06 2.500000e+01 6.000000e+01
+118 8.550570e-10 5.532831e-06 2.500000e+01 6.000000e+01
+119 8.650570e-10 5.599498e-06 2.500000e+01 6.000000e+01
+120 8.750570e-10 5.666165e-06 2.500000e+01 6.000000e+01
+121 8.850570e-10 5.732831e-06 2.500000e+01 6.000000e+01
+122 8.950570e-10 5.799498e-06 2.500000e+01 6.000000e+01
+123 9.050570e-10 5.866165e-06 2.500000e+01 6.000000e+01
+124 9.150570e-10 5.932831e-06 2.500000e+01 6.000000e+01
+125 9.250570e-10 5.999497e-06 2.500000e+01 6.000000e+01
+126 9.350570e-10 6.066165e-06 2.500000e+01 6.000000e+01
+127 9.450570e-10 6.132832e-06 2.500000e+01 6.000000e+01
+128 9.550570e-10 6.199498e-06 2.500000e+01 6.000000e+01
+129 9.650570e-10 6.266165e-06 2.500000e+01 6.000000e+01
+130 9.750570e-10 6.332832e-06 2.500000e+01 6.000000e+01
+131 9.850570e-10 6.399497e-06 2.500000e+01 6.000000e+01
+132 9.950570e-10 6.466164e-06 2.500000e+01 6.000000e+01
+133 1.005057e-09 6.532831e-06 2.500000e+01 6.000000e+01
+134 1.015057e-09 6.599497e-06 2.500000e+01 6.000000e+01
+135 1.025057e-09 6.666165e-06 2.500000e+01 6.000000e+01
+136 1.035057e-09 6.732832e-06 2.500000e+01 6.000000e+01
+137 1.045057e-09 6.799498e-06 2.500000e+01 6.000000e+01
+138 1.055057e-09 6.866164e-06 2.500000e+01 6.000000e+01
+139 1.065057e-09 6.932831e-06 2.500000e+01 6.000000e+01
+140 1.075057e-09 6.999498e-06 2.500000e+01 6.000000e+01
+141 1.085057e-09 7.066164e-06 2.500000e+01 6.000000e+01
+142 1.095057e-09 7.132830e-06 2.500000e+01 6.000000e+01
+143 1.105057e-09 7.199496e-06 2.500000e+01 6.000000e+01
+144 1.115057e-09 7.266163e-06 2.500000e+01 6.000000e+01
+145 1.125057e-09 7.332830e-06 2.500000e+01 6.000000e+01
+146 1.135057e-09 7.399497e-06 2.500000e+01 6.000000e+01
+147 1.145057e-09 7.466164e-06 2.500000e+01 6.000000e+01
+148 1.155057e-09 7.532831e-06 2.500000e+01 6.000000e+01
+149 1.165057e-09 7.599498e-06 2.500000e+01 6.000000e+01
+150 1.175057e-09 7.666164e-06 2.500000e+01 6.000000e+01
+151 1.185057e-09 7.732831e-06 2.500000e+01 6.000000e+01
+152 1.195057e-09 7.799498e-06 2.500000e+01 6.000000e+01
+153 1.205057e-09 7.866164e-06 2.500000e+01 6.000000e+01
+154 1.215057e-09 7.932830e-06 2.500000e+01 6.000000e+01
+155 1.225057e-09 7.999497e-06 2.500000e+01 6.000000e+01
+156 1.235057e-09 8.066164e-06 2.500000e+01 6.000000e+01
+157 1.245057e-09 8.132831e-06 2.500000e+01 6.000000e+01
+158 1.255057e-09 8.199497e-06 2.500000e+01 6.000000e+01
+159 1.265057e-09 8.266164e-06 2.500000e+01 6.000000e+01
+160 1.275057e-09 8.332830e-06 2.500000e+01 6.000000e+01
+161 1.285057e-09 8.399498e-06 2.500000e+01 6.000000e+01
+162 1.295057e-09 8.466164e-06 2.500000e+01 6.000000e+01
+163 1.305057e-09 8.532830e-06 2.500000e+01 6.000000e+01
+164 1.315057e-09 8.599498e-06 2.500000e+01 6.000000e+01
+165 1.325057e-09 8.666164e-06 2.500000e+01 6.000000e+01
+166 1.335057e-09 8.732830e-06 2.500000e+01 6.000000e+01
+167 1.345057e-09 8.799496e-06 2.500000e+01 6.000000e+01
+168 1.355057e-09 8.866164e-06 2.500000e+01 6.000000e+01
+169 1.365057e-09 8.932830e-06 2.500000e+01 6.000000e+01
+170 1.375057e-09 8.999496e-06 2.500000e+01 6.000000e+01
+
+Index time V(1) V(2) V(3)
+--------------------------------------------------------------------------------
+171 1.385057e-09 9.066164e-06 2.500000e+01 6.000000e+01
+172 1.395057e-09 9.132829e-06 2.500000e+01 6.000000e+01
+173 1.405057e-09 9.199496e-06 2.500000e+01 6.000000e+01
+174 1.415057e-09 9.266164e-06 2.500000e+01 6.000000e+01
+175 1.425057e-09 9.332831e-06 2.500000e+01 6.000000e+01
+176 1.435057e-09 9.399497e-06 2.500000e+01 6.000000e+01
+177 1.445057e-09 9.466165e-06 2.500000e+01 6.000000e+01
+178 1.455057e-09 9.532830e-06 2.500000e+01 6.000000e+01
+179 1.465057e-09 9.599496e-06 2.500000e+01 6.000000e+01
+180 1.475057e-09 9.666164e-06 2.500000e+01 6.000000e+01
+181 1.485057e-09 9.732829e-06 2.500000e+01 6.000000e+01
+182 1.495057e-09 9.799496e-06 2.500000e+01 6.000000e+01
+183 1.505057e-09 9.866164e-06 2.500000e+01 6.000000e+01
+184 1.515057e-09 9.932829e-06 2.500000e+01 6.000000e+01
+185 1.525057e-09 9.999496e-06 2.500000e+01 6.000000e+01
+186 1.535057e-09 1.006616e-05 2.500000e+01 6.000000e+01
+187 1.545057e-09 1.013283e-05 2.500000e+01 6.000000e+01
+188 1.555057e-09 1.019950e-05 2.500000e+01 6.000000e+01
+189 1.565057e-09 1.026616e-05 2.500000e+01 6.000000e+01
+190 1.575057e-09 1.033283e-05 2.500000e+01 6.000000e+01
+191 1.585057e-09 1.039950e-05 2.500000e+01 6.000000e+01
+192 1.595057e-09 1.046616e-05 2.500000e+01 6.000000e+01
+193 1.605057e-09 1.053283e-05 2.500000e+01 6.000000e+01
+194 1.615057e-09 1.059950e-05 2.500000e+01 6.000000e+01
+195 1.625057e-09 1.066616e-05 2.500000e+01 6.000000e+01
+196 1.635057e-09 1.073283e-05 2.500000e+01 6.000000e+01
+197 1.645057e-09 1.079950e-05 2.500000e+01 6.000000e+01
+198 1.655057e-09 1.086616e-05 2.500000e+01 6.000000e+01
+199 1.665057e-09 1.093283e-05 2.500000e+01 6.000000e+01
+200 1.675057e-09 1.099950e-05 2.500000e+01 6.000000e+01
+201 1.685057e-09 1.106616e-05 2.500000e+01 6.000000e+01
+202 1.695057e-09 1.113283e-05 2.500000e+01 6.000000e+01
+203 1.705057e-09 1.119950e-05 2.500000e+01 6.000000e+01
+204 1.715057e-09 1.126616e-05 2.500000e+01 6.000000e+01
+205 1.725057e-09 1.133283e-05 2.500000e+01 6.000000e+01
+206 1.735057e-09 1.139950e-05 2.500000e+01 6.000000e+01
+207 1.745057e-09 1.146616e-05 2.500000e+01 6.000000e+01
+208 1.755057e-09 1.153283e-05 2.500000e+01 6.000000e+01
+209 1.765057e-09 1.159950e-05 2.500000e+01 6.000000e+01
+210 1.775057e-09 1.166616e-05 2.500000e+01 6.000000e+01
+211 1.785057e-09 1.173283e-05 2.500000e+01 6.000000e+01
+212 1.795057e-09 1.179950e-05 2.500000e+01 6.000000e+01
+213 1.805057e-09 1.186616e-05 2.500000e+01 6.000000e+01
+214 1.815057e-09 1.193283e-05 2.500000e+01 6.000000e+01
+215 1.825057e-09 1.199950e-05 2.500000e+01 6.000000e+01
+216 1.835057e-09 1.206616e-05 2.500000e+01 6.000000e+01
+217 1.845057e-09 1.213283e-05 2.500000e+01 6.000000e+01
+218 1.855057e-09 1.219950e-05 2.500000e+01 6.000000e+01
+219 1.865057e-09 1.226616e-05 2.500000e+01 6.000000e+01
+220 1.875057e-09 1.233283e-05 2.500000e+01 6.000000e+01
+221 1.885057e-09 1.239950e-05 2.500000e+01 6.000000e+01
+222 1.895057e-09 1.246616e-05 2.500000e+01 6.000000e+01
+223 1.905057e-09 1.253283e-05 2.500000e+01 6.000000e+01
+224 1.915057e-09 1.259949e-05 2.500000e+01 6.000000e+01
+225 1.925057e-09 1.266616e-05 2.500000e+01 6.000000e+01
+226 1.935057e-09 1.273283e-05 2.500000e+01 6.000000e+01
+227 1.945057e-09 1.279950e-05 2.500000e+01 6.000000e+01
+228 1.955057e-09 1.286616e-05 2.500000e+01 6.000000e+01
+
+Index time V(1) V(2) V(3)
+--------------------------------------------------------------------------------
+229 1.965057e-09 1.293283e-05 2.500000e+01 6.000000e+01
+230 1.975057e-09 1.299950e-05 2.500000e+01 6.000000e+01
+231 1.985057e-09 1.306616e-05 2.500000e+01 6.000000e+01
+232 1.995057e-09 1.313283e-05 2.500000e+01 6.000000e+01
+233 2.005057e-09 1.319949e-05 2.500000e+01 6.000000e+01
+234 2.015057e-09 1.326616e-05 2.500000e+01 6.000000e+01
+235 2.025057e-09 1.333283e-05 2.500000e+01 6.000000e+01
+236 2.035057e-09 1.339949e-05 2.500000e+01 6.000000e+01
+237 2.045057e-09 1.346616e-05 2.500000e+01 6.000000e+01
+238 2.055057e-09 1.353283e-05 2.500000e+01 6.000000e+01
+239 2.065057e-09 1.359949e-05 2.500000e+01 6.000000e+01
+240 2.075057e-09 1.366616e-05 2.500000e+01 6.000000e+01
+241 2.085057e-09 1.373283e-05 2.500000e+01 6.000000e+01
+242 2.095057e-09 1.379950e-05 2.500000e+01 6.000000e+01
+243 2.105057e-09 1.386616e-05 2.500000e+01 6.000000e+01
+244 2.115057e-09 1.393283e-05 2.500000e+01 6.000000e+01
+245 2.125057e-09 1.399949e-05 2.500000e+01 6.000000e+01
+246 2.135057e-09 1.406616e-05 2.500000e+01 6.000000e+01
+247 2.145057e-09 1.413283e-05 2.500000e+01 6.000000e+01
+248 2.155057e-09 1.419949e-05 2.500000e+01 6.000000e+01
+249 2.165057e-09 1.426616e-05 2.500000e+01 6.000000e+01
+250 2.175057e-09 1.433283e-05 2.500000e+01 6.000000e+01
+251 2.185057e-09 1.439950e-05 2.500000e+01 6.000000e+01
+252 2.195057e-09 1.446616e-05 2.500000e+01 6.000000e+01
+253 2.205057e-09 1.453283e-05 2.500000e+01 6.000000e+01
+254 2.215057e-09 1.459949e-05 2.500000e+01 6.000000e+01
+255 2.225057e-09 1.466616e-05 2.500000e+01 6.000000e+01
+256 2.235057e-09 1.473282e-05 2.500000e+01 6.000000e+01
+257 2.245057e-09 1.479949e-05 2.500000e+01 6.000000e+01
+258 2.255057e-09 1.486616e-05 2.500000e+01 6.000000e+01
+259 2.265057e-09 1.493282e-05 2.500000e+01 6.000000e+01
+260 2.275057e-09 1.499949e-05 2.500000e+01 6.000000e+01
+261 2.285057e-09 1.506616e-05 2.500000e+01 6.000000e+01
+262 2.295057e-09 1.513283e-05 2.500000e+01 6.000000e+01
+263 2.305057e-09 1.519949e-05 2.500000e+01 6.000000e+01
+264 2.315057e-09 1.526616e-05 2.500000e+01 6.000000e+01
+265 2.325057e-09 1.533283e-05 2.500000e+01 6.000000e+01
+266 2.335057e-09 1.539949e-05 2.500000e+01 6.000000e+01
+267 2.345057e-09 1.546616e-05 2.500000e+01 6.000000e+01
+268 2.355057e-09 1.553283e-05 2.500000e+01 6.000000e+01
+269 2.365057e-09 1.559949e-05 2.500000e+01 6.000000e+01
+270 2.375057e-09 1.566616e-05 2.500000e+01 6.000000e+01
+271 2.385057e-09 1.573282e-05 2.500000e+01 6.000000e+01
+272 2.395057e-09 1.579949e-05 2.500000e+01 6.000000e+01
+273 2.405057e-09 1.586616e-05 2.500000e+01 6.000000e+01
+274 2.415057e-09 1.593283e-05 2.500000e+01 6.000000e+01
+275 2.425057e-09 1.599949e-05 2.500000e+01 6.000000e+01
+276 2.435057e-09 1.606616e-05 2.500000e+01 6.000000e+01
+277 2.445057e-09 1.613283e-05 2.500000e+01 6.000000e+01
+278 2.455057e-09 1.619949e-05 2.500000e+01 6.000000e+01
+279 2.465057e-09 1.626616e-05 2.500000e+01 6.000000e+01
+280 2.475057e-09 1.633283e-05 2.500000e+01 6.000000e+01
+281 2.485057e-09 1.639949e-05 2.500000e+01 6.000000e+01
+282 2.495057e-09 1.646616e-05 2.500000e+01 6.000000e+01
+283 2.500000e-09 1.649911e-05 2.500000e+01 6.000000e+01
+
+ * /home/michi/tryprogressbar.oregano
+ Transient Analysis Fri Jun 9 21:36:56 2017
+--------------------------------------------------------------------------------
+Index time V(4) V(5) l_l1#branch
+--------------------------------------------------------------------------------
+0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
+1 1.000000e-13 2.000000e+01 6.000000e+01 -1.33333e-08
+2 2.000000e-13 2.000000e+01 6.000000e+01 -2.66667e-08
+3 4.000000e-13 2.000000e+01 6.000000e+01 -5.33333e-08
+4 8.000000e-13 2.000000e+01 6.000000e+01 -1.06667e-07
+5 1.600000e-12 2.000000e+01 6.000000e+01 -2.13333e-07
+6 3.200000e-12 2.000000e+01 5.999999e+01 -4.26667e-07
+7 4.666667e-12 2.000000e+01 5.999999e+01 -6.22222e-07
+8 5.358333e-12 2.000000e+01 5.999999e+01 -7.14444e-07
+9 6.568750e-12 2.000000e+01 5.999998e+01 -8.75833e-07
+10 6.903776e-12 2.000000e+01 5.999998e+01 -9.20503e-07
+11 7.490072e-12 2.000000e+01 5.999998e+01 -9.98676e-07
+12 7.652350e-12 2.000000e+01 5.999998e+01 -1.02031e-06
+13 7.936337e-12 2.000000e+01 5.999998e+01 -1.05818e-06
+14 8.014940e-12 2.000000e+01 5.999998e+01 -1.06866e-06
+15 8.152496e-12 2.000000e+01 5.999998e+01 -1.08700e-06
+16 8.190570e-12 2.000000e+01 5.999998e+01 -1.09208e-06
+17 8.257199e-12 2.000000e+01 5.999998e+01 -1.10096e-06
+18 8.275641e-12 2.000000e+01 5.999998e+01 -1.10342e-06
+19 8.307914e-12 2.000000e+01 5.999998e+01 -1.10772e-06
+20 8.339341e-12 2.000000e+01 3.724889e-01 -1.10879e-06
+21 8.368989e-12 2.000000e+01 3.721389e-01 -1.10685e-06
+22 8.415783e-12 2.000000e+01 3.715661e-01 -1.10379e-06
+23 8.462595e-12 2.000000e+01 3.709686e-01 -1.10072e-06
+24 8.556218e-12 2.000000e+01 3.697067e-01 -1.09460e-06
+25 8.743465e-12 2.000000e+01 3.669207e-01 -1.08235e-06
+26 9.117958e-12 2.000000e+01 3.603499e-01 -1.05783e-06
+27 9.866944e-12 2.000000e+01 3.436482e-01 -1.00878e-06
+28 1.000000e-11 2.000000e+01 3.402226e-01 -1.00006e-06
+29 1.014980e-11 2.000000e+01 3.362220e-01 -9.90242e-07
+30 1.044939e-11 2.000000e+01 3.277442e-01 -9.70601e-07
+31 1.104858e-11 2.000000e+01 3.093324e-01 -9.31291e-07
+32 1.224696e-11 2.000000e+01 2.687330e-01 -8.52554e-07
+33 1.464371e-11 2.000000e+01 1.860234e-01 -6.94587e-07
+34 1.943722e-11 2.000000e+01 6.687593e-02 -3.77040e-07
+35 2.680459e-11 2.000000e+01 5.465349e-03 1.132302e-07
+36 3.505704e-11 2.000000e+01 7.712940e-06 6.633178e-07
+37 4.505704e-11 2.000000e+01 -6.02386e-07 1.329984e-06
+38 5.505704e-11 2.000000e+01 2.702691e-07 1.996651e-06
+39 6.505704e-11 2.000000e+01 2.593860e-07 2.663318e-06
+40 7.505704e-11 2.000000e+01 3.334843e-07 3.329984e-06
+41 8.505704e-11 2.000000e+01 3.994362e-07 3.996651e-06
+42 9.505704e-11 2.000000e+01 4.661716e-07 4.663318e-06
+43 1.050570e-10 2.000000e+01 5.328316e-07 5.329984e-06
+44 1.150570e-10 2.000000e+01 5.994989e-07 5.996651e-06
+45 1.250570e-10 2.000000e+01 6.661655e-07 6.663318e-06
+46 1.350570e-10 2.000000e+01 7.328321e-07 7.329984e-06
+47 1.450570e-10 2.000000e+01 7.994989e-07 7.996651e-06
+48 1.550570e-10 2.000000e+01 8.661655e-07 8.663318e-06
+49 1.650570e-10 2.000000e+01 9.328322e-07 9.329984e-06
+50 1.750570e-10 2.000000e+01 9.994988e-07 9.996651e-06
+51 1.850570e-10 2.000000e+01 1.066166e-06 1.066332e-05
+52 1.950570e-10 2.000000e+01 1.132832e-06 1.132998e-05
+53 2.050570e-10 2.000000e+01 1.199499e-06 1.199665e-05
+54 2.150570e-10 2.000000e+01 1.266165e-06 1.266332e-05
+
+Index time V(4) V(5) l_l1#branch
+--------------------------------------------------------------------------------
+55 2.250570e-10 2.000000e+01 1.332832e-06 1.332998e-05
+56 2.350570e-10 2.000000e+01 1.399499e-06 1.399665e-05
+57 2.450570e-10 2.000000e+01 1.466165e-06 1.466332e-05
+58 2.550570e-10 2.000000e+01 1.532832e-06 1.532998e-05
+59 2.650570e-10 2.000000e+01 1.599499e-06 1.599665e-05
+60 2.750570e-10 2.000000e+01 1.666165e-06 1.666332e-05
+61 2.850570e-10 2.000000e+01 1.732832e-06 1.732998e-05
+62 2.950570e-10 2.000000e+01 1.799499e-06 1.799665e-05
+63 3.050570e-10 2.000000e+01 1.866165e-06 1.866332e-05
+64 3.150570e-10 2.000000e+01 1.932832e-06 1.932998e-05
+65 3.250570e-10 2.000000e+01 1.999499e-06 1.999665e-05
+66 3.350570e-10 2.000000e+01 2.066165e-06 2.066332e-05
+67 3.450570e-10 2.000000e+01 2.132832e-06 2.132998e-05
+68 3.550570e-10 2.000000e+01 2.199499e-06 2.199665e-05
+69 3.650570e-10 2.000000e+01 2.266165e-06 2.266332e-05
+70 3.750570e-10 2.000000e+01 2.332832e-06 2.332998e-05
+71 3.850570e-10 2.000000e+01 2.399499e-06 2.399665e-05
+72 3.950570e-10 2.000000e+01 2.466165e-06 2.466332e-05
+73 4.050570e-10 2.000000e+01 2.532832e-06 2.532998e-05
+74 4.150570e-10 2.000000e+01 2.599499e-06 2.599665e-05
+75 4.250570e-10 2.000000e+01 2.666166e-06 2.666332e-05
+76 4.350570e-10 2.000000e+01 2.732832e-06 2.732998e-05
+77 4.450570e-10 2.000000e+01 2.799499e-06 2.799665e-05
+78 4.550570e-10 2.000000e+01 2.866166e-06 2.866332e-05
+79 4.650570e-10 2.000000e+01 2.932832e-06 2.932998e-05
+80 4.750570e-10 2.000000e+01 2.999499e-06 2.999665e-05
+81 4.850570e-10 2.000000e+01 3.066165e-06 3.066332e-05
+82 4.950570e-10 2.000000e+01 3.132832e-06 3.132998e-05
+83 5.050570e-10 2.000000e+01 3.199498e-06 3.199665e-05
+84 5.150570e-10 2.000000e+01 3.266165e-06 3.266332e-05
+85 5.250570e-10 2.000000e+01 3.332832e-06 3.332998e-05
+86 5.350570e-10 2.000000e+01 3.399499e-06 3.399665e-05
+87 5.450570e-10 2.000000e+01 3.466166e-06 3.466331e-05
+88 5.550570e-10 2.000000e+01 3.532832e-06 3.532998e-05
+89 5.650570e-10 2.000000e+01 3.599499e-06 3.599665e-05
+90 5.750570e-10 2.000000e+01 3.666165e-06 3.666331e-05
+91 5.850570e-10 2.000000e+01 3.732832e-06 3.732998e-05
+92 5.950570e-10 2.000000e+01 3.799498e-06 3.799665e-05
+93 6.050570e-10 2.000000e+01 3.866165e-06 3.866331e-05
+94 6.150570e-10 2.000000e+01 3.932832e-06 3.932998e-05
+95 6.250570e-10 2.000000e+01 3.999498e-06 3.999665e-05
+96 6.350570e-10 2.000000e+01 4.066165e-06 4.066331e-05
+97 6.450570e-10 2.000000e+01 4.132832e-06 4.132998e-05
+98 6.550570e-10 2.000000e+01 4.199499e-06 4.199665e-05
+99 6.650570e-10 2.000000e+01 4.266165e-06 4.266331e-05
+100 6.750570e-10 2.000000e+01 4.332832e-06 4.332998e-05
+101 6.850570e-10 2.000000e+01 4.399498e-06 4.399665e-05
+102 6.950570e-10 2.000000e+01 4.466165e-06 4.466331e-05
+103 7.050570e-10 2.000000e+01 4.532832e-06 4.532998e-05
+104 7.150570e-10 2.000000e+01 4.599498e-06 4.599665e-05
+105 7.250570e-10 2.000000e+01 4.666165e-06 4.666331e-05
+106 7.350570e-10 2.000000e+01 4.732832e-06 4.732998e-05
+107 7.450570e-10 2.000000e+01 4.799499e-06 4.799665e-05
+108 7.550570e-10 2.000000e+01 4.866165e-06 4.866331e-05
+109 7.650570e-10 2.000000e+01 4.932831e-06 4.932998e-05
+110 7.750570e-10 2.000000e+01 4.999498e-06 4.999664e-05
+111 7.850570e-10 2.000000e+01 5.066164e-06 5.066331e-05
+112 7.950570e-10 2.000000e+01 5.132831e-06 5.132998e-05
+
+Index time V(4) V(5) l_l1#branch
+--------------------------------------------------------------------------------
+113 8.050570e-10 2.000000e+01 5.199498e-06 5.199664e-05
+114 8.150570e-10 2.000000e+01 5.266165e-06 5.266331e-05
+115 8.250570e-10 2.000000e+01 5.332831e-06 5.332998e-05
+116 8.350570e-10 2.000000e+01 5.399498e-06 5.399664e-05
+117 8.450570e-10 2.000000e+01 5.466165e-06 5.466331e-05
+118 8.550570e-10 2.000000e+01 5.532831e-06 5.532998e-05
+119 8.650570e-10 2.000000e+01 5.599498e-06 5.599664e-05
+120 8.750570e-10 2.000000e+01 5.666165e-06 5.666331e-05
+121 8.850570e-10 2.000000e+01 5.732831e-06 5.732998e-05
+122 8.950570e-10 2.000000e+01 5.799498e-06 5.799664e-05
+123 9.050570e-10 2.000000e+01 5.866165e-06 5.866331e-05
+124 9.150570e-10 2.000000e+01 5.932831e-06 5.932998e-05
+125 9.250570e-10 2.000000e+01 5.999497e-06 5.999664e-05
+126 9.350570e-10 2.000000e+01 6.066165e-06 6.066331e-05
+127 9.450570e-10 2.000000e+01 6.132832e-06 6.132997e-05
+128 9.550570e-10 2.000000e+01 6.199498e-06 6.199664e-05
+129 9.650570e-10 2.000000e+01 6.266165e-06 6.266331e-05
+130 9.750570e-10 2.000000e+01 6.332832e-06 6.332997e-05
+131 9.850570e-10 2.000000e+01 6.399497e-06 6.399664e-05
+132 9.950570e-10 2.000000e+01 6.466164e-06 6.466331e-05
+133 1.005057e-09 2.000000e+01 6.532831e-06 6.532997e-05
+134 1.015057e-09 2.000000e+01 6.599497e-06 6.599664e-05
+135 1.025057e-09 2.000000e+01 6.666165e-06 6.666331e-05
+136 1.035057e-09 2.000000e+01 6.732832e-06 6.732997e-05
+137 1.045057e-09 2.000000e+01 6.799498e-06 6.799664e-05
+138 1.055057e-09 2.000000e+01 6.866164e-06 6.866331e-05
+139 1.065057e-09 2.000000e+01 6.932831e-06 6.932997e-05
+140 1.075057e-09 2.000000e+01 6.999498e-06 6.999664e-05
+141 1.085057e-09 2.000000e+01 7.066164e-06 7.066331e-05
+142 1.095057e-09 2.000000e+01 7.132830e-06 7.132997e-05
+143 1.105057e-09 2.000000e+01 7.199496e-06 7.199664e-05
+144 1.115057e-09 2.000000e+01 7.266163e-06 7.266330e-05
+145 1.125057e-09 2.000000e+01 7.332830e-06 7.332997e-05
+146 1.135057e-09 2.000000e+01 7.399497e-06 7.399664e-05
+147 1.145057e-09 2.000000e+01 7.466164e-06 7.466330e-05
+148 1.155057e-09 2.000000e+01 7.532831e-06 7.532997e-05
+149 1.165057e-09 2.000000e+01 7.599498e-06 7.599664e-05
+150 1.175057e-09 2.000000e+01 7.666164e-06 7.666330e-05
+151 1.185057e-09 2.000000e+01 7.732831e-06 7.732997e-05
+152 1.195057e-09 2.000000e+01 7.799498e-06 7.799664e-05
+153 1.205057e-09 2.000000e+01 7.866164e-06 7.866330e-05
+154 1.215057e-09 2.000000e+01 7.932830e-06 7.932997e-05
+155 1.225057e-09 2.000000e+01 7.999497e-06 7.999664e-05
+156 1.235057e-09 2.000000e+01 8.066164e-06 8.066330e-05
+157 1.245057e-09 2.000000e+01 8.132831e-06 8.132997e-05
+158 1.255057e-09 2.000000e+01 8.199497e-06 8.199663e-05
+159 1.265057e-09 2.000000e+01 8.266164e-06 8.266330e-05
+160 1.275057e-09 2.000000e+01 8.332830e-06 8.332997e-05
+161 1.285057e-09 2.000000e+01 8.399498e-06 8.399663e-05
+162 1.295057e-09 2.000000e+01 8.466164e-06 8.466330e-05
+163 1.305057e-09 2.000000e+01 8.532830e-06 8.532997e-05
+164 1.315057e-09 2.000000e+01 8.599498e-06 8.599663e-05
+165 1.325057e-09 2.000000e+01 8.666164e-06 8.666330e-05
+166 1.335057e-09 2.000000e+01 8.732830e-06 8.732997e-05
+167 1.345057e-09 2.000000e+01 8.799496e-06 8.799663e-05
+168 1.355057e-09 2.000000e+01 8.866164e-06 8.866330e-05
+169 1.365057e-09 2.000000e+01 8.932830e-06 8.932996e-05
+170 1.375057e-09 2.000000e+01 8.999496e-06 8.999663e-05
+
+Index time V(4) V(5) l_l1#branch
+--------------------------------------------------------------------------------
+171 1.385057e-09 2.000000e+01 9.066164e-06 9.066330e-05
+172 1.395057e-09 2.000000e+01 9.132829e-06 9.132996e-05
+173 1.405057e-09 2.000000e+01 9.199496e-06 9.199663e-05
+174 1.415057e-09 2.000000e+01 9.266164e-06 9.266330e-05
+175 1.425057e-09 2.000000e+01 9.332831e-06 9.332996e-05
+176 1.435057e-09 2.000000e+01 9.399497e-06 9.399663e-05
+177 1.445057e-09 2.000000e+01 9.466165e-06 9.466330e-05
+178 1.455057e-09 2.000000e+01 9.532830e-06 9.532996e-05
+179 1.465057e-09 2.000000e+01 9.599496e-06 9.599663e-05
+180 1.475057e-09 2.000000e+01 9.666164e-06 9.666329e-05
+181 1.485057e-09 2.000000e+01 9.732829e-06 9.732996e-05
+182 1.495057e-09 2.000000e+01 9.799496e-06 9.799663e-05
+183 1.505057e-09 2.000000e+01 9.866164e-06 9.866329e-05
+184 1.515057e-09 2.000000e+01 9.932829e-06 9.932996e-05
+185 1.525057e-09 2.000000e+01 9.999496e-06 9.999663e-05
+186 1.535057e-09 2.000000e+01 1.006616e-05 1.006633e-04
+187 1.545057e-09 2.000000e+01 1.013283e-05 1.013300e-04
+188 1.555057e-09 2.000000e+01 1.019950e-05 1.019966e-04
+189 1.565057e-09 2.000000e+01 1.026616e-05 1.026633e-04
+190 1.575057e-09 2.000000e+01 1.033283e-05 1.033300e-04
+191 1.585057e-09 2.000000e+01 1.039950e-05 1.039966e-04
+192 1.595057e-09 2.000000e+01 1.046616e-05 1.046633e-04
+193 1.605057e-09 2.000000e+01 1.053283e-05 1.053300e-04
+194 1.615057e-09 2.000000e+01 1.059950e-05 1.059966e-04
+195 1.625057e-09 2.000000e+01 1.066616e-05 1.066633e-04
+196 1.635057e-09 2.000000e+01 1.073283e-05 1.073300e-04
+197 1.645057e-09 2.000000e+01 1.079950e-05 1.079966e-04
+198 1.655057e-09 2.000000e+01 1.086616e-05 1.086633e-04
+199 1.665057e-09 2.000000e+01 1.093283e-05 1.093300e-04
+200 1.675057e-09 2.000000e+01 1.099950e-05 1.099966e-04
+201 1.685057e-09 2.000000e+01 1.106616e-05 1.106633e-04
+202 1.695057e-09 2.000000e+01 1.113283e-05 1.113300e-04
+203 1.705057e-09 2.000000e+01 1.119950e-05 1.119966e-04
+204 1.715057e-09 2.000000e+01 1.126616e-05 1.126633e-04
+205 1.725057e-09 2.000000e+01 1.133283e-05 1.133300e-04
+206 1.735057e-09 2.000000e+01 1.139950e-05 1.139966e-04
+207 1.745057e-09 2.000000e+01 1.146616e-05 1.146633e-04
+208 1.755057e-09 2.000000e+01 1.153283e-05 1.153300e-04
+209 1.765057e-09 2.000000e+01 1.159950e-05 1.159966e-04
+210 1.775057e-09 2.000000e+01 1.166616e-05 1.166633e-04
+211 1.785057e-09 2.000000e+01 1.173283e-05 1.173299e-04
+212 1.795057e-09 2.000000e+01 1.179950e-05 1.179966e-04
+213 1.805057e-09 2.000000e+01 1.186616e-05 1.186633e-04
+214 1.815057e-09 2.000000e+01 1.193283e-05 1.193299e-04
+215 1.825057e-09 2.000000e+01 1.199950e-05 1.199966e-04
+216 1.835057e-09 2.000000e+01 1.206616e-05 1.206633e-04
+217 1.845057e-09 2.000000e+01 1.213283e-05 1.213299e-04
+218 1.855057e-09 2.000000e+01 1.219950e-05 1.219966e-04
+219 1.865057e-09 2.000000e+01 1.226616e-05 1.226633e-04
+220 1.875057e-09 2.000000e+01 1.233283e-05 1.233299e-04
+221 1.885057e-09 2.000000e+01 1.239950e-05 1.239966e-04
+222 1.895057e-09 2.000000e+01 1.246616e-05 1.246633e-04
+223 1.905057e-09 2.000000e+01 1.253283e-05 1.253299e-04
+224 1.915057e-09 2.000000e+01 1.259949e-05 1.259966e-04
+225 1.925057e-09 2.000000e+01 1.266616e-05 1.266633e-04
+226 1.935057e-09 2.000000e+01 1.273283e-05 1.273299e-04
+227 1.945057e-09 2.000000e+01 1.279950e-05 1.279966e-04
+228 1.955057e-09 2.000000e+01 1.286616e-05 1.286633e-04
+
+Index time V(4) V(5) l_l1#branch
+--------------------------------------------------------------------------------
+229 1.965057e-09 2.000000e+01 1.293283e-05 1.293299e-04
+230 1.975057e-09 2.000000e+01 1.299950e-05 1.299966e-04
+231 1.985057e-09 2.000000e+01 1.306616e-05 1.306633e-04
+232 1.995057e-09 2.000000e+01 1.313283e-05 1.313299e-04
+233 2.005057e-09 2.000000e+01 1.319949e-05 1.319966e-04
+234 2.015057e-09 2.000000e+01 1.326616e-05 1.326633e-04
+235 2.025057e-09 2.000000e+01 1.333283e-05 1.333299e-04
+236 2.035057e-09 2.000000e+01 1.339949e-05 1.339966e-04
+237 2.045057e-09 2.000000e+01 1.346616e-05 1.346633e-04
+238 2.055057e-09 2.000000e+01 1.353283e-05 1.353299e-04
+239 2.065057e-09 2.000000e+01 1.359949e-05 1.359966e-04
+240 2.075057e-09 2.000000e+01 1.366616e-05 1.366633e-04
+241 2.085057e-09 2.000000e+01 1.373283e-05 1.373299e-04
+242 2.095057e-09 2.000000e+01 1.379950e-05 1.379966e-04
+243 2.105057e-09 2.000000e+01 1.386616e-05 1.386633e-04
+244 2.115057e-09 2.000000e+01 1.393283e-05 1.393299e-04
+245 2.125057e-09 2.000000e+01 1.399949e-05 1.399966e-04
+246 2.135057e-09 2.000000e+01 1.406616e-05 1.406633e-04
+247 2.145057e-09 2.000000e+01 1.413283e-05 1.413299e-04
+248 2.155057e-09 2.000000e+01 1.419949e-05 1.419966e-04
+249 2.165057e-09 2.000000e+01 1.426616e-05 1.426633e-04
+250 2.175057e-09 2.000000e+01 1.433283e-05 1.433299e-04
+251 2.185057e-09 2.000000e+01 1.439950e-05 1.439966e-04
+252 2.195057e-09 2.000000e+01 1.446616e-05 1.446633e-04
+253 2.205057e-09 2.000000e+01 1.453283e-05 1.453299e-04
+254 2.215057e-09 2.000000e+01 1.459949e-05 1.459966e-04
+255 2.225057e-09 2.000000e+01 1.466616e-05 1.466633e-04
+256 2.235057e-09 2.000000e+01 1.473282e-05 1.473299e-04
+257 2.245057e-09 2.000000e+01 1.479949e-05 1.479966e-04
+258 2.255057e-09 2.000000e+01 1.486616e-05 1.486633e-04
+259 2.265057e-09 2.000000e+01 1.493282e-05 1.493299e-04
+260 2.275057e-09 2.000000e+01 1.499949e-05 1.499966e-04
+261 2.285057e-09 2.000000e+01 1.506616e-05 1.506633e-04
+262 2.295057e-09 2.000000e+01 1.513283e-05 1.513299e-04
+263 2.305057e-09 2.000000e+01 1.519949e-05 1.519966e-04
+264 2.315057e-09 2.000000e+01 1.526616e-05 1.526633e-04
+265 2.325057e-09 2.000000e+01 1.533283e-05 1.533299e-04
+266 2.335057e-09 2.000000e+01 1.539949e-05 1.539966e-04
+267 2.345057e-09 2.000000e+01 1.546616e-05 1.546633e-04
+268 2.355057e-09 2.000000e+01 1.553283e-05 1.553299e-04
+269 2.365057e-09 2.000000e+01 1.559949e-05 1.559966e-04
+270 2.375057e-09 2.000000e+01 1.566616e-05 1.566633e-04
+271 2.385057e-09 2.000000e+01 1.573282e-05 1.573299e-04
+272 2.395057e-09 2.000000e+01 1.579949e-05 1.579966e-04
+273 2.405057e-09 2.000000e+01 1.586616e-05 1.586633e-04
+274 2.415057e-09 2.000000e+01 1.593283e-05 1.593299e-04
+275 2.425057e-09 2.000000e+01 1.599949e-05 1.599966e-04
+276 2.435057e-09 2.000000e+01 1.606616e-05 1.606633e-04
+277 2.445057e-09 2.000000e+01 1.613283e-05 1.613299e-04
+278 2.455057e-09 2.000000e+01 1.619949e-05 1.619966e-04
+279 2.465057e-09 2.000000e+01 1.626616e-05 1.626633e-04
+280 2.475057e-09 2.000000e+01 1.633283e-05 1.633299e-04
+281 2.485057e-09 2.000000e+01 1.639949e-05 1.639966e-04
+282 2.495057e-09 2.000000e+01 1.646616e-05 1.646632e-04
+283 2.500000e-09 2.000000e+01 1.649911e-05 1.649928e-04
+
+ * /home/michi/tryprogressbar.oregano
+ Transient Analysis Fri Jun 9 21:36:56 2017
+--------------------------------------------------------------------------------
+Index time v_v1#branch v_v2#branch v_v3#branch
+--------------------------------------------------------------------------------
+0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
+1 1.000000e-13 1.333333e-08 0.000000e+00 1.393333e-08
+2 2.000000e-13 2.666667e-08 0.000000e+00 2.726667e-08
+3 4.000000e-13 5.333333e-08 0.000000e+00 5.393333e-08
+4 8.000000e-13 1.066667e-07 0.000000e+00 1.072667e-07
+5 1.600000e-12 2.133333e-07 0.000000e+00 2.139333e-07
+6 3.200000e-12 4.266666e-07 0.000000e+00 4.272666e-07
+7 4.666667e-12 6.222221e-07 0.000000e+00 6.228221e-07
+8 5.358333e-12 7.144443e-07 0.000000e+00 7.150443e-07
+9 6.568750e-12 8.758332e-07 0.000000e+00 8.764332e-07
+10 6.903776e-12 9.205033e-07 0.000000e+00 9.211033e-07
+11 7.490072e-12 9.986760e-07 0.000000e+00 9.992760e-07
+12 7.652350e-12 1.020313e-06 0.000000e+00 1.020913e-06
+13 7.936337e-12 1.058178e-06 0.000000e+00 1.058778e-06
+14 8.014940e-12 1.068658e-06 0.000000e+00 1.069258e-06
+15 8.152496e-12 1.086999e-06 0.000000e+00 1.087599e-06
+16 8.190570e-12 1.092076e-06 0.000000e+00 1.092676e-06
+17 8.257199e-12 1.100960e-06 0.000000e+00 1.101560e-06
+18 8.275641e-12 1.103418e-06 0.000000e+00 1.104019e-06
+19 8.307914e-12 1.107722e-06 0.000000e+00 1.108322e-06
+20 8.339341e-12 1.108789e-06 0.000000e+00 3.724890e+00
+21 8.368989e-12 1.106849e-06 0.000000e+00 3.721390e+00
+22 8.415783e-12 1.103787e-06 0.000000e+00 3.715662e+00
+23 8.462595e-12 1.100724e-06 0.000000e+00 3.709687e+00
+24 8.556218e-12 1.094598e-06 0.000000e+00 3.697069e+00
+25 8.743465e-12 1.082345e-06 0.000000e+00 3.669208e+00
+26 9.117958e-12 1.057833e-06 0.000000e+00 3.603500e+00
+27 9.866944e-12 1.008779e-06 0.000000e+00 3.436483e+00
+28 1.000000e-11 1.000061e-06 0.000000e+00 3.402227e+00
+29 1.014980e-11 9.902420e-07 0.000000e+00 3.362221e+00
+30 1.044939e-11 9.706006e-07 0.000000e+00 3.277443e+00
+31 1.104858e-11 9.312909e-07 0.000000e+00 3.093325e+00
+32 1.224696e-11 8.525536e-07 0.000000e+00 2.687331e+00
+33 1.464371e-11 6.945865e-07 0.000000e+00 1.860234e+00
+34 1.943722e-11 3.770397e-07 0.000000e+00 6.687597e-01
+35 2.680459e-11 -1.13230e-07 0.000000e+00 5.465338e-02
+36 3.505704e-11 -6.63318e-07 0.000000e+00 7.646608e-05
+37 4.505704e-11 -1.32998e-06 0.000000e+00 -7.35384e-06
+38 5.505704e-11 -1.99665e-06 0.000000e+00 7.060396e-07
+39 6.505704e-11 -2.66332e-06 0.000000e+00 -6.94583e-08
+40 7.505704e-11 -3.32998e-06 0.000000e+00 4.858916e-09
+41 8.505704e-11 -3.99665e-06 0.000000e+00 -2.28947e-09
+42 9.505704e-11 -4.66332e-06 0.000000e+00 -1.60213e-09
+43 1.050570e-10 -5.32998e-06 0.000000e+00 -1.66822e-09
+44 1.150570e-10 -5.99665e-06 0.000000e+00 -1.66186e-09
+45 1.250570e-10 -6.66332e-06 0.000000e+00 -1.66248e-09
+46 1.350570e-10 -7.32998e-06 0.000000e+00 -1.66242e-09
+47 1.450570e-10 -7.99665e-06 0.000000e+00 -1.66243e-09
+48 1.550570e-10 -8.66332e-06 0.000000e+00 -1.66242e-09
+49 1.650570e-10 -9.32998e-06 0.000000e+00 -1.66243e-09
+50 1.750570e-10 -9.99665e-06 0.000000e+00 -1.66242e-09
+51 1.850570e-10 -1.06633e-05 0.000000e+00 -1.66242e-09
+52 1.950570e-10 -1.13300e-05 0.000000e+00 -1.66243e-09
+53 2.050570e-10 -1.19967e-05 0.000000e+00 -1.66242e-09
+54 2.150570e-10 -1.26633e-05 0.000000e+00 -1.66242e-09
+
+Index time v_v1#branch v_v2#branch v_v3#branch
+--------------------------------------------------------------------------------
+55 2.250570e-10 -1.33300e-05 0.000000e+00 -1.66242e-09
+56 2.350570e-10 -1.39967e-05 0.000000e+00 -1.66242e-09
+57 2.450570e-10 -1.46633e-05 0.000000e+00 -1.66242e-09
+58 2.550570e-10 -1.53300e-05 0.000000e+00 -1.66243e-09
+59 2.650570e-10 -1.59967e-05 0.000000e+00 -1.66242e-09
+60 2.750570e-10 -1.66633e-05 0.000000e+00 -1.66242e-09
+61 2.850570e-10 -1.73300e-05 0.000000e+00 -1.66242e-09
+62 2.950570e-10 -1.79967e-05 0.000000e+00 -1.66243e-09
+63 3.050570e-10 -1.86633e-05 0.000000e+00 -1.66242e-09
+64 3.150570e-10 -1.93300e-05 0.000000e+00 -1.66241e-09
+65 3.250570e-10 -1.99967e-05 0.000000e+00 -1.66243e-09
+66 3.350570e-10 -2.06633e-05 0.000000e+00 -1.66242e-09
+67 3.450570e-10 -2.13300e-05 0.000000e+00 -1.66242e-09
+68 3.550570e-10 -2.19966e-05 0.000000e+00 -1.66243e-09
+69 3.650570e-10 -2.26633e-05 0.000000e+00 -1.66242e-09
+70 3.750570e-10 -2.33300e-05 0.000000e+00 -1.66242e-09
+71 3.850570e-10 -2.39966e-05 0.000000e+00 -1.66244e-09
+72 3.950570e-10 -2.46633e-05 0.000000e+00 -1.66242e-09
+73 4.050570e-10 -2.53300e-05 0.000000e+00 -1.66242e-09
+74 4.150570e-10 -2.59966e-05 0.000000e+00 -1.66243e-09
+75 4.250570e-10 -2.66633e-05 0.000000e+00 -1.66242e-09
+76 4.350570e-10 -2.73300e-05 0.000000e+00 -1.66241e-09
+77 4.450570e-10 -2.79966e-05 0.000000e+00 -1.66242e-09
+78 4.550570e-10 -2.86633e-05 0.000000e+00 -1.66244e-09
+79 4.650570e-10 -2.93300e-05 0.000000e+00 -1.66242e-09
+80 4.750570e-10 -2.99966e-05 0.000000e+00 -1.66242e-09
+81 4.850570e-10 -3.06633e-05 0.000000e+00 -1.66243e-09
+82 4.950570e-10 -3.13300e-05 0.000000e+00 -1.66241e-09
+83 5.050570e-10 -3.19966e-05 0.000000e+00 -1.66243e-09
+84 5.150570e-10 -3.26633e-05 0.000000e+00 -1.66243e-09
+85 5.250570e-10 -3.33300e-05 0.000000e+00 -1.66242e-09
+86 5.350570e-10 -3.39966e-05 0.000000e+00 -1.66242e-09
+87 5.450570e-10 -3.46633e-05 0.000000e+00 -1.66243e-09
+88 5.550570e-10 -3.53300e-05 0.000000e+00 -1.66241e-09
+89 5.650570e-10 -3.59966e-05 0.000000e+00 -1.66242e-09
+90 5.750570e-10 -3.66633e-05 0.000000e+00 -1.66240e-09
+91 5.850570e-10 -3.73300e-05 0.000000e+00 -1.66246e-09
+92 5.950570e-10 -3.79966e-05 0.000000e+00 -1.66240e-09
+93 6.050570e-10 -3.86633e-05 0.000000e+00 -1.66242e-09
+94 6.150570e-10 -3.93300e-05 0.000000e+00 -1.66244e-09
+95 6.250570e-10 -3.99966e-05 0.000000e+00 -1.66242e-09
+96 6.350570e-10 -4.06633e-05 0.000000e+00 -1.66242e-09
+97 6.450570e-10 -4.13300e-05 0.000000e+00 -1.66243e-09
+98 6.550570e-10 -4.19966e-05 0.000000e+00 -1.66243e-09
+99 6.650570e-10 -4.26633e-05 0.000000e+00 -1.66241e-09
+100 6.750570e-10 -4.33300e-05 0.000000e+00 -1.66243e-09
+101 6.850570e-10 -4.39966e-05 0.000000e+00 -1.66242e-09
+102 6.950570e-10 -4.46633e-05 0.000000e+00 -1.66242e-09
+103 7.050570e-10 -4.53300e-05 0.000000e+00 -1.66244e-09
+104 7.150570e-10 -4.59966e-05 0.000000e+00 -1.66241e-09
+105 7.250570e-10 -4.66633e-05 0.000000e+00 -1.66242e-09
+106 7.350570e-10 -4.73300e-05 0.000000e+00 -1.66244e-09
+107 7.450570e-10 -4.79966e-05 0.000000e+00 -1.66241e-09
+108 7.550570e-10 -4.86633e-05 0.000000e+00 -1.66243e-09
+109 7.650570e-10 -4.93300e-05 0.000000e+00 -1.66240e-09
+110 7.750570e-10 -4.99966e-05 0.000000e+00 -1.66243e-09
+111 7.850570e-10 -5.06633e-05 0.000000e+00 -1.66241e-09
+112 7.950570e-10 -5.13300e-05 0.000000e+00 -1.66243e-09
+
+Index time v_v1#branch v_v2#branch v_v3#branch
+--------------------------------------------------------------------------------
+113 8.050570e-10 -5.19966e-05 0.000000e+00 -1.66244e-09
+114 8.150570e-10 -5.26633e-05 0.000000e+00 -1.66241e-09
+115 8.250570e-10 -5.33300e-05 0.000000e+00 -1.66242e-09
+116 8.350570e-10 -5.39966e-05 0.000000e+00 -1.66243e-09
+117 8.450570e-10 -5.46633e-05 0.000000e+00 -1.66244e-09
+118 8.550570e-10 -5.53300e-05 0.000000e+00 -1.66240e-09
+119 8.650570e-10 -5.59966e-05 0.000000e+00 -1.66243e-09
+120 8.750570e-10 -5.66633e-05 0.000000e+00 -1.66242e-09
+121 8.850570e-10 -5.73300e-05 0.000000e+00 -1.66241e-09
+122 8.950570e-10 -5.79966e-05 0.000000e+00 -1.66243e-09
+123 9.050570e-10 -5.86633e-05 0.000000e+00 -1.66244e-09
+124 9.150570e-10 -5.93300e-05 0.000000e+00 -1.66241e-09
+125 9.250570e-10 -5.99966e-05 0.000000e+00 -1.66240e-09
+126 9.350570e-10 -6.06633e-05 0.000000e+00 -1.66244e-09
+127 9.450570e-10 -6.13300e-05 0.000000e+00 -1.66244e-09
+128 9.550570e-10 -6.19966e-05 0.000000e+00 -1.66240e-09
+129 9.650570e-10 -6.26633e-05 0.000000e+00 -1.66243e-09
+130 9.750570e-10 -6.33300e-05 0.000000e+00 -1.66244e-09
+131 9.850570e-10 -6.39966e-05 0.000000e+00 -1.66237e-09
+132 9.950570e-10 -6.46633e-05 0.000000e+00 -1.66246e-09
+133 1.005057e-09 -6.53300e-05 0.000000e+00 -1.66241e-09
+134 1.015057e-09 -6.59966e-05 0.000000e+00 -1.66242e-09
+135 1.025057e-09 -6.66633e-05 0.000000e+00 -1.66245e-09
+136 1.035057e-09 -6.73300e-05 0.000000e+00 -1.66243e-09
+137 1.045057e-09 -6.79966e-05 0.000000e+00 -1.66240e-09
+138 1.055057e-09 -6.86633e-05 0.000000e+00 -1.66240e-09
+139 1.065057e-09 -6.93300e-05 0.000000e+00 -1.66243e-09
+140 1.075057e-09 -6.99966e-05 0.000000e+00 -1.66243e-09
+141 1.085057e-09 -7.06633e-05 0.000000e+00 -1.66243e-09
+142 1.095057e-09 -7.13300e-05 0.000000e+00 -1.66240e-09
+143 1.105057e-09 -7.19966e-05 0.000000e+00 -1.66240e-09
+144 1.115057e-09 -7.26633e-05 0.000000e+00 -1.66243e-09
+145 1.125057e-09 -7.33300e-05 0.000000e+00 -1.66243e-09
+146 1.135057e-09 -7.39966e-05 0.000000e+00 -1.66243e-09
+147 1.145057e-09 -7.46633e-05 0.000000e+00 -1.66243e-09
+148 1.155057e-09 -7.53300e-05 0.000000e+00 -1.66243e-09
+149 1.165057e-09 -7.59966e-05 0.000000e+00 -1.66243e-09
+150 1.175057e-09 -7.66633e-05 0.000000e+00 -1.66243e-09
+151 1.185057e-09 -7.73300e-05 0.000000e+00 -1.66243e-09
+152 1.195057e-09 -7.79966e-05 0.000000e+00 -1.66243e-09
+153 1.205057e-09 -7.86633e-05 0.000000e+00 -1.66240e-09
+154 1.215057e-09 -7.93300e-05 0.000000e+00 -1.66241e-09
+155 1.225057e-09 -7.99966e-05 0.000000e+00 -1.66243e-09
+156 1.235057e-09 -8.06633e-05 0.000000e+00 -1.66243e-09
+157 1.245057e-09 -8.13300e-05 0.000000e+00 -1.66243e-09
+158 1.255057e-09 -8.19966e-05 0.000000e+00 -1.66240e-09
+159 1.265057e-09 -8.26633e-05 0.000000e+00 -1.66243e-09
+160 1.275057e-09 -8.33300e-05 0.000000e+00 -1.66243e-09
+161 1.285057e-09 -8.39966e-05 0.000000e+00 -1.66245e-09
+162 1.295057e-09 -8.46633e-05 0.000000e+00 -1.66240e-09
+163 1.305057e-09 -8.53300e-05 0.000000e+00 -1.66241e-09
+164 1.315057e-09 -8.59966e-05 0.000000e+00 -1.66246e-09
+165 1.325057e-09 -8.66633e-05 0.000000e+00 -1.66240e-09
+166 1.335057e-09 -8.73300e-05 0.000000e+00 -1.66241e-09
+167 1.345057e-09 -8.79966e-05 0.000000e+00 -1.66241e-09
+168 1.355057e-09 -8.86633e-05 0.000000e+00 -1.66246e-09
+169 1.365057e-09 -8.93300e-05 0.000000e+00 -1.66242e-09
+170 1.375057e-09 -8.99966e-05 0.000000e+00 -1.66237e-09
+
+Index time v_v1#branch v_v2#branch v_v3#branch
+--------------------------------------------------------------------------------
+171 1.385057e-09 -9.06633e-05 0.000000e+00 -1.66248e-09
+172 1.395057e-09 -9.13300e-05 0.000000e+00 -1.66237e-09
+173 1.405057e-09 -9.19966e-05 0.000000e+00 -1.66243e-09
+174 1.415057e-09 -9.26633e-05 0.000000e+00 -1.66245e-09
+175 1.425057e-09 -9.33300e-05 0.000000e+00 -1.66243e-09
+176 1.435057e-09 -9.39966e-05 0.000000e+00 -1.66240e-09
+177 1.445057e-09 -9.46633e-05 0.000000e+00 -1.66246e-09
+178 1.455057e-09 -9.53300e-05 0.000000e+00 -1.66237e-09
+179 1.465057e-09 -9.59966e-05 0.000000e+00 -1.66243e-09
+180 1.475057e-09 -9.66633e-05 0.000000e+00 -1.66245e-09
+181 1.485057e-09 -9.73300e-05 0.000000e+00 -1.66238e-09
+182 1.495057e-09 -9.79966e-05 0.000000e+00 -1.66244e-09
+183 1.505057e-09 -9.86633e-05 0.000000e+00 -1.66245e-09
+184 1.515057e-09 -9.93300e-05 0.000000e+00 -1.66237e-09
+185 1.525057e-09 -9.99966e-05 0.000000e+00 -1.66244e-09
+186 1.535057e-09 -1.00663e-04 0.000000e+00 -1.66243e-09
+187 1.545057e-09 -1.01330e-04 0.000000e+00 -1.66245e-09
+188 1.555057e-09 -1.01997e-04 0.000000e+00 -1.66240e-09
+189 1.565057e-09 -1.02663e-04 0.000000e+00 -1.66241e-09
+190 1.575057e-09 -1.03330e-04 0.000000e+00 -1.66245e-09
+191 1.585057e-09 -1.03997e-04 0.000000e+00 -1.66240e-09
+192 1.595057e-09 -1.04663e-04 0.000000e+00 -1.66238e-09
+193 1.605057e-09 -1.05330e-04 0.000000e+00 -1.66248e-09
+194 1.615057e-09 -1.05997e-04 0.000000e+00 -1.66240e-09
+195 1.625057e-09 -1.06663e-04 0.000000e+00 -1.66243e-09
+196 1.635057e-09 -1.07330e-04 0.000000e+00 -1.66243e-09
+197 1.645057e-09 -1.07997e-04 0.000000e+00 -1.66243e-09
+198 1.655057e-09 -1.08663e-04 0.000000e+00 -1.66240e-09
+199 1.665057e-09 -1.09330e-04 0.000000e+00 -1.66241e-09
+200 1.675057e-09 -1.09997e-04 0.000000e+00 -1.66248e-09
+201 1.685057e-09 -1.10663e-04 0.000000e+00 -1.66237e-09
+202 1.695057e-09 -1.11330e-04 0.000000e+00 -1.66241e-09
+203 1.705057e-09 -1.11997e-04 0.000000e+00 -1.66248e-09
+204 1.715057e-09 -1.12663e-04 0.000000e+00 -1.66237e-09
+205 1.725057e-09 -1.13330e-04 0.000000e+00 -1.66246e-09
+206 1.735057e-09 -1.13997e-04 0.000000e+00 -1.66240e-09
+207 1.745057e-09 -1.14663e-04 0.000000e+00 -1.66241e-09
+208 1.755057e-09 -1.15330e-04 0.000000e+00 -1.66245e-09
+209 1.765057e-09 -1.15997e-04 0.000000e+00 -1.66243e-09
+210 1.775057e-09 -1.16663e-04 0.000000e+00 -1.66240e-09
+211 1.785057e-09 -1.17330e-04 0.000000e+00 -1.66238e-09
+212 1.795057e-09 -1.17997e-04 0.000000e+00 -1.66249e-09
+213 1.805057e-09 -1.18663e-04 0.000000e+00 -1.66240e-09
+214 1.815057e-09 -1.19330e-04 0.000000e+00 -1.66241e-09
+215 1.825057e-09 -1.19997e-04 0.000000e+00 -1.66245e-09
+216 1.835057e-09 -1.20663e-04 0.000000e+00 -1.66243e-09
+217 1.845057e-09 -1.21330e-04 0.000000e+00 -1.66240e-09
+218 1.855057e-09 -1.21997e-04 0.000000e+00 -1.66243e-09
+219 1.865057e-09 -1.22663e-04 0.000000e+00 -1.66243e-09
+220 1.875057e-09 -1.23330e-04 0.000000e+00 -1.66243e-09
+221 1.885057e-09 -1.23997e-04 0.000000e+00 -1.66240e-09
+222 1.895057e-09 -1.24663e-04 0.000000e+00 -1.66243e-09
+223 1.905057e-09 -1.25330e-04 0.000000e+00 -1.66238e-09
+224 1.915057e-09 -1.25997e-04 0.000000e+00 -1.66246e-09
+225 1.925057e-09 -1.26663e-04 0.000000e+00 -1.66245e-09
+226 1.935057e-09 -1.27330e-04 0.000000e+00 -1.66243e-09
+227 1.945057e-09 -1.27997e-04 0.000000e+00 -1.66243e-09
+228 1.955057e-09 -1.28663e-04 0.000000e+00 -1.66240e-09
+
+Index time v_v1#branch v_v2#branch v_v3#branch
+--------------------------------------------------------------------------------
+229 1.965057e-09 -1.29330e-04 0.000000e+00 -1.66241e-09
+230 1.975057e-09 -1.29997e-04 0.000000e+00 -1.66246e-09
+231 1.985057e-09 -1.30663e-04 0.000000e+00 -1.66232e-09
+232 1.995057e-09 -1.31330e-04 0.000000e+00 -1.66249e-09
+233 2.005057e-09 -1.31997e-04 0.000000e+00 -1.66240e-09
+234 2.015057e-09 -1.32663e-04 0.000000e+00 -1.66238e-09
+235 2.025057e-09 -1.33330e-04 0.000000e+00 -1.66249e-09
+236 2.035057e-09 -1.33997e-04 0.000000e+00 -1.66240e-09
+237 2.045057e-09 -1.34663e-04 0.000000e+00 -1.66246e-09
+238 2.055057e-09 -1.35330e-04 0.000000e+00 -1.66240e-09
+239 2.065057e-09 -1.35997e-04 0.000000e+00 -1.66243e-09
+240 2.075057e-09 -1.36663e-04 0.000000e+00 -1.66240e-09
+241 2.085057e-09 -1.37330e-04 0.000000e+00 -1.66246e-09
+242 2.095057e-09 -1.37997e-04 0.000000e+00 -1.66245e-09
+243 2.105057e-09 -1.38663e-04 0.000000e+00 -1.66235e-09
+244 2.115057e-09 -1.39330e-04 0.000000e+00 -1.66251e-09
+245 2.125057e-09 -1.39997e-04 0.000000e+00 -1.66234e-09
+246 2.135057e-09 -1.40663e-04 0.000000e+00 -1.66246e-09
+247 2.145057e-09 -1.41330e-04 0.000000e+00 -1.66240e-09
+248 2.155057e-09 -1.41997e-04 0.000000e+00 -1.66241e-09
+249 2.165057e-09 -1.42663e-04 0.000000e+00 -1.66246e-09
+250 2.175057e-09 -1.43330e-04 0.000000e+00 -1.66235e-09
+251 2.185057e-09 -1.43997e-04 0.000000e+00 -1.66256e-09
+252 2.195057e-09 -1.44663e-04 0.000000e+00 -1.66234e-09
+253 2.205057e-09 -1.45330e-04 0.000000e+00 -1.66241e-09
+254 2.215057e-09 -1.45997e-04 0.000000e+00 -1.66240e-09
+255 2.225057e-09 -1.46663e-04 0.000000e+00 -1.66241e-09
+256 2.235057e-09 -1.47330e-04 0.000000e+00 -1.66241e-09
+257 2.245057e-09 -1.47997e-04 0.000000e+00 -1.66246e-09
+258 2.255057e-09 -1.48663e-04 0.000000e+00 -1.66245e-09
+259 2.265057e-09 -1.49330e-04 0.000000e+00 -1.66235e-09
+260 2.275057e-09 -1.49997e-04 0.000000e+00 -1.66246e-09
+261 2.285057e-09 -1.50663e-04 0.000000e+00 -1.66250e-09
+262 2.295057e-09 -1.51330e-04 0.000000e+00 -1.66235e-09
+263 2.305057e-09 -1.51997e-04 0.000000e+00 -1.66246e-09
+264 2.315057e-09 -1.52663e-04 0.000000e+00 -1.66240e-09
+265 2.325057e-09 -1.53330e-04 0.000000e+00 -1.66241e-09
+266 2.335057e-09 -1.53997e-04 0.000000e+00 -1.66246e-09
+267 2.345057e-09 -1.54663e-04 0.000000e+00 -1.66240e-09
+268 2.355057e-09 -1.55330e-04 0.000000e+00 -1.66241e-09
+269 2.365057e-09 -1.55997e-04 0.000000e+00 -1.66246e-09
+270 2.375057e-09 -1.56663e-04 0.000000e+00 -1.66245e-09
+271 2.385057e-09 -1.57330e-04 0.000000e+00 -1.66235e-09
+272 2.395057e-09 -1.57997e-04 0.000000e+00 -1.66241e-09
+273 2.405057e-09 -1.58663e-04 0.000000e+00 -1.66251e-09
+274 2.415057e-09 -1.59330e-04 0.000000e+00 -1.66245e-09
+275 2.425057e-09 -1.59997e-04 0.000000e+00 -1.66240e-09
+276 2.435057e-09 -1.60663e-04 0.000000e+00 -1.66241e-09
+277 2.445057e-09 -1.61330e-04 0.000000e+00 -1.66240e-09
+278 2.455057e-09 -1.61997e-04 0.000000e+00 -1.66241e-09
+279 2.465057e-09 -1.62663e-04 0.000000e+00 -1.66235e-09
+280 2.475057e-09 -1.63330e-04 0.000000e+00 -1.66251e-09
+281 2.485057e-09 -1.63997e-04 0.000000e+00 -1.66239e-09
+282 2.495057e-09 -1.64663e-04 0.000000e+00 -1.66241e-09
+283 2.500000e-09 -1.64993e-04 0.000000e+00 -1.66255e-09
+
+CPU time since last call: 0.028 seconds.
+
+Total CPU time: 0.028 seconds.
+
+Total DRAM available = 7774.257812 MB.
+DRAM currently available = 3526.550781 MB.
+Total ngspice program size = 15.930664 MB.
+Resident set size = 1.977539 MB.
+Shared ngspice pages = 1.665039 MB.
+Text (code) pages = 1.453125 MB.
+Stack = 0 bytes.
+Library pages = 414.000 kB.
+
diff --git a/test/test-files/test_engine_ngspice_watcher/error/step_zero/input.netlist b/test/test-files/test_engine_ngspice_watcher/error/step_zero/input.netlist
new file mode 100644
index 0000000..7d90d8c
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/error/step_zero/input.netlist
@@ -0,0 +1,24 @@
+* /home/michi/tryProgressBar.oregano
+*----------------------------------------------
+* ngspice - NETLIST
+.options OUT=120
+*------------- Models -------------------------
+.include /usr/local/share/oregano/models/1N4148.model
+*------------- Circuit Description-------------
+V_V3 5 1 dc 0
+R_R1 3 0 10k
+D_D1 5 3 D1N4148
+S1 1 0 2 0 M_S1
+.model M_S1 sw(VT=20 VH=0.0 RON=0.1 ROFF=100G)
+V_V2 2 0 dc 0.0 ac 0.0 PULSE -5 25 0.0 0 0 1.0u 10u
+L_L1 4 1 300uH
+V_V1 4 0 dc 20
+C_C1 3 0 100u IC=60
+
+*----------------------------------------------
+.tran 0.000000e+00 2.500000e-08 0.000000e+00 uic
+.print tran all
+
+.op
+
+.END
diff --git a/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt b/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt
diff --git a/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/expected.txt b/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/expected.txt
new file mode 100644
index 0000000..f2630a4
--- /dev/null
+++ b/test/test-files/test_engine_ngspice_watcher/error/step_zero/result/expected.txt
@@ -0,0 +1,5 @@
+
+Circuit: * /home/michi/tryprogressbar.oregano
+
+Error on line 19 : .tran 0.000000e+00 2.500000e-08 0.000000e+00 uic
+ TSTEP is invalid, must be greater than zero.
diff --git a/test/test.c b/test/test.c
new file mode 100644
index 0000000..9741532
--- /dev/null
+++ b/test/test.c
@@ -0,0 +1,45 @@
+#include <glib.h>
+
+// may be already defined, if not:
+#ifndef DEBUG_FORCE_FAIL
+#define DEBUG_FORCE_FAIL 0
+#endif
+
+#include "helper.c"
+#include "test_wire.c"
+#include "test_engine.c"
+#include "test_nodestore.c"
+#include "test_update_connection_designators.c"
+#include "test_thread_pipe.c"
+#include "test_engine_ngspice.c"
+
+#if DEBUG_FORCE_FAIL
+void
+test_false ()
+{
+ g_assert (FALSE==TRUE);
+}
+#endif
+
+int
+main (int argc, char *argv[])
+{
+#if !(GLIB_CHECK_VERSION(2,36,0))
+ g_type_init();
+#endif
+
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/core/coords", test_coords);
+ g_test_add_func ("/core/model/wire/intersection", test_wire_intersection);
+ g_test_add_func ("/core/model/wire/tcrossing", test_wire_tcrossing);
+ g_test_add_func ("/core/model/nodestore", test_nodestore);
+ g_test_add_func ("/core/engine", test_engine);
+ add_funcs_test_update_connection_designators();
+ add_funcs_test_thread_pipe_buffered();
+ add_funcs_test_engine_ngspice();
+#if DEBUG_FORCE_FAIL
+ g_test_add_func ("/false", test_false);
+#endif
+ return g_test_run ();
+}
diff --git a/test/test_engine.c b/test/test_engine.c
new file mode 100644
index 0000000..5a96f0c
--- /dev/null
+++ b/test/test_engine.c
@@ -0,0 +1,33 @@
+#ifndef TEST_ENGINE
+#define TEST_ENGINE
+
+#include <glib.h>
+
+void
+test_engine ()
+{
+ extern gchar** get_variables (const gchar *str, gint *count);
+
+ const gchar *test[] = {
+ " foo bar\twhat \t the\t heck \tis this",
+ "foo bar\twhat \t the\t heck \tis this\t ",
+ " \tfoo bar\twhat \t the\t heck \tis this\t ",
+ "\t foo bar what \t the\t heck \tis this \t",
+ "\n foo bar what \n the\n heck \nis\t this \n",
+ " \nfoo bar\t\twhat \t\n\t the\n heck \nis\t this\n\n\n",
+ NULL
+ };
+ const gchar *const expected[] = {"foo","bar","what","the","heck","is","this"};
+ gint i,j, k;
+
+ for (i=0; test[i]; i++) {
+ gchar **v = get_variables (test[i], &k);
+ g_assert_cmpint (k,==,7);
+ for (j=0; j<k; j++) {
+ g_assert_cmpstr (v[j], ==, expected[j]);
+ }
+ g_strfreev (v);
+ }
+}
+
+#endif
diff --git a/test/test_engine_ngspice.c b/test/test_engine_ngspice.c
new file mode 100644
index 0000000..56a039d
--- /dev/null
+++ b/test/test_engine_ngspice.c
@@ -0,0 +1,223 @@
+/*
+ * test_engine_ngspice.c
+ *
+ *
+ * Authors:
+ * Michi <st101564@stud.uni-stuttgart.de>
+ *
+ * Web page: https://ahoi.io/project/oregano
+ *
+ *
+ * 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 the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "../src/engines/ngspice-watcher.h"
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <glib/gprintf.h>
+
+static void test_engine_ngspice_basic();
+static void test_engine_ngspice_error_no_such_file_or_directory();
+static void test_engine_ngspice_error_step_zero();
+
+void
+add_funcs_test_engine_ngspice() {
+ g_test_add_func ("/core/engine/ngspice/watcher/basic", test_engine_ngspice_basic);
+ g_test_add_func ("/core/engine/ngspice/watcher/error/no_such_file_or_directory", test_engine_ngspice_error_no_such_file_or_directory);
+ g_test_add_func ("/core/engine/ngspice/watcher/error/step_zero", test_engine_ngspice_error_step_zero);
+}
+
+static void test_engine_ngspice_log_append_error(GList **list, const gchar *string) {
+ *list = g_list_append(*list, g_strdup(string));
+}
+
+static void print_log(const GList *list) {
+ for (const GList *walker = list; walker; walker = walker->next)
+ g_printf("%s", (char *)walker->data);
+}
+
+typedef struct {
+ NgspiceWatcherBuildAndLaunchResources *resources;
+ OreganoNgSpice *ngspice;
+ GMainLoop *loop;
+ GList *log_list;
+ SimSettings *sim_settings;
+} TestEngineNgspiceResources;
+
+static TestEngineNgspiceResources *test_engine_ngspice_resources_new() {
+ TestEngineNgspiceResources *test_resources = g_new0(TestEngineNgspiceResources, 1);
+
+
+ test_resources->resources = g_new0(NgspiceWatcherBuildAndLaunchResources, 1);
+ NgspiceWatcherBuildAndLaunchResources *resources = test_resources->resources;
+ test_resources->ngspice = OREGANO_NGSPICE(oregano_spice_new(NULL, FALSE));
+ OreganoNgSpice *ngspice = test_resources->ngspice;
+ GMainLoop *loop = g_main_loop_new(NULL, FALSE);
+ test_resources->loop = loop;
+ g_signal_connect_swapped(G_OBJECT(ngspice), "done", G_CALLBACK(g_main_loop_quit), loop);
+ g_signal_connect_swapped(G_OBJECT(ngspice), "aborted", G_CALLBACK(g_main_loop_quit), loop);
+
+ resources->aborted = &ngspice->priv->aborted;
+ resources->analysis = &ngspice->priv->analysis;
+ resources->child_pid = &ngspice->priv->child_pid;
+ resources->current = &ngspice->priv->current;
+ resources->emit_instance = ngspice;
+
+ resources->log.log = (gpointer)&test_resources->log_list;
+ resources->log.log_append = NULL;
+ resources->log.log_append_error = (LogFunction)test_engine_ngspice_log_append_error;
+
+ resources->num_analysis = &ngspice->priv->num_analysis;
+ resources->progress_ngspice = &ngspice->priv->progress_ngspice;
+ resources->progress_reader = &ngspice->priv->progress_reader;
+ test_resources->sim_settings = sim_settings_new(NULL);
+ resources->sim_settings = test_resources->sim_settings;
+ resources->netlist_file = g_strdup("/tmp/netlist.tmp");
+ resources->ngspice_result_file = g_strdup("/tmp/netlist.lst");
+
+ resources->cancel_info = ngspice->priv->cancel_info;
+ cancel_info_subscribe(resources->cancel_info);
+
+ return test_resources;
+}
+
+static void test_engine_ngspice_resources_finalize(TestEngineNgspiceResources *test_resources) {
+ NgspiceWatcherBuildAndLaunchResources *resources = test_resources->resources;
+
+ g_main_loop_unref(test_resources->loop);
+
+ sim_settings_finalize(test_resources->sim_settings);
+ g_object_unref(test_resources->ngspice);
+
+ g_list_free_full(test_resources->log_list, g_free);
+
+ ngspice_watcher_build_and_launch_resources_finalize(resources);
+}
+
+static void test_engine_ngspice_basic() {
+
+ TestEngineNgspiceResources *test_resources = test_engine_ngspice_resources_new();
+
+ g_autofree gchar *test_dir = get_test_base_dir();
+
+ g_free(test_resources->resources->netlist_file);
+ test_resources->resources->netlist_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/basic/input.netlist", test_dir);
+
+ g_free(test_resources->resources->ngspice_result_file);
+ test_resources->resources->ngspice_result_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/basic/result/actual.txt", test_dir);
+
+ g_autofree gchar *actual_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/basic/result/actual.txt", test_dir);
+ g_autofree gchar *expected_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/basic/result/expected.txt", test_dir);
+
+ ngspice_watcher_build_and_launch(test_resources->resources);
+ g_main_loop_run(test_resources->loop);
+ print_log(test_resources->log_list);
+
+ test_engine_ngspice_resources_finalize(test_resources);
+
+ g_autofree gchar *actual_content = NULL;
+ gsize actual_size;
+ g_file_get_contents(actual_file, &actual_content, &actual_size, NULL);
+
+ g_autofree gchar *expected_content = NULL;
+ gsize expected_size;
+ g_file_get_contents(expected_file, &expected_content, &expected_size, NULL);
+
+ // FIXME this comparision is too cumbersome and error prone
+ // any kind of change in the ngspice output will brake this
+ // we should only compare the lines which are considered
+ // number output of the simulation
+ // g_assert_true(expected_size > 350);
+ // g_assert_true(actual_size > expected_size - 350);
+ // double distance = 0;
+ // for (gsize i = 0; i < expected_size - 350; i++) {
+ // distance += ABS(actual_content[i] - expected_content[i]);
+ // }
+ // FIXME this will never work reliably
+ // g_assert_true(distance < 3*16*20);
+}
+
+static void test_engine_ngspice_error_no_such_file_or_directory() {
+ TestEngineNgspiceResources *test_resources = test_engine_ngspice_resources_new();
+
+ // make sure that the given file does not exist
+ g_free(test_resources->resources->netlist_file);
+ gint fd = g_file_open_tmp(NULL, &test_resources->resources->netlist_file, NULL);
+ g_close(fd, NULL);
+ g_remove(test_resources->resources->netlist_file);
+
+ ngspice_watcher_build_and_launch(test_resources->resources);
+ g_main_loop_run(test_resources->loop);
+
+ g_assert_nonnull(test_resources->log_list);
+ g_assert_true(g_str_has_suffix(test_resources->log_list->data, " No such file or directory\n"));
+
+ test_engine_ngspice_resources_finalize(test_resources);
+}
+
+static void test_engine_ngspice_error_step_zero() {
+ TestEngineNgspiceResources *test_resources = test_engine_ngspice_resources_new();
+
+
+ g_autofree gchar *test_dir = get_test_base_dir();
+
+ g_free(test_resources->resources->netlist_file);
+ test_resources->resources->netlist_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/error/step_zero/input.netlist", test_dir);
+
+ g_free(test_resources->resources->ngspice_result_file);
+ test_resources->resources->ngspice_result_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt", test_dir);
+
+ g_autofree gchar *actual_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/error/step_zero/result/actual.txt", test_dir);
+ g_autofree gchar *expected_file = g_strdup_printf("%s/test-files/test_engine_ngspice_watcher/error/step_zero/result/expected.txt", test_dir);
+
+
+ ngspice_watcher_build_and_launch(test_resources->resources);
+ g_main_loop_run(test_resources->loop);
+
+ g_autofree gchar *actual_content = NULL;
+ gsize actual_size;
+ g_file_get_contents(actual_file, &actual_content, &actual_size, NULL);
+
+ g_autofree gchar *expected_content = NULL;
+ gsize expected_size;
+ g_file_get_contents(expected_file, &expected_content, &expected_size, NULL);
+
+ //
+ // g_assert_cmpstr(actual_content, ==, expected_content);
+ //
+ // const gchar *array[] = {
+ // "\n",
+ // "ngspice stopped due to error, no simulation run!\n",
+ // "\n",
+ // "ERROR: fatal error in ngspice, exit(1)\n",
+ // "### ngspice exited abnormally ###\n",
+ // "### netlist error detected ###\n",
+ // "You made a mistake in the simulation settings or part properties.\n",
+ // "The following information will help you to analyze the error.\n",
+ // NULL
+ // };
+ //
+ // GList *walker = test_resources->log_list;
+ //
+ // for (int i = 0; array[i] != NULL; i++) {
+ // g_assert_nonnull(walker);
+ // g_assert_nonnull(walker->data);
+ // g_assert_cmpstr(walker->data, ==, array[i]);
+ // walker = walker->next;
+ // }
+
+ test_engine_ngspice_resources_finalize(test_resources);
+}
diff --git a/test/test_nodestore.c b/test/test_nodestore.c
new file mode 100644
index 0000000..50bbd39
--- /dev/null
+++ b/test/test_nodestore.c
@@ -0,0 +1,65 @@
+#ifndef TEST_NODESTORE
+#define TEST_NODESTORE
+
+#include <glib.h>
+
+void
+test_nodestore ()
+{
+ gint i;
+ NodeStore *store;
+ Part *part;
+ Wire *wire;
+ Node *node;
+
+ Coords p_pos = {111.,22.};
+ Coords n_pos = {111.,33.};
+ Coords w_pos = {111.,7.};
+ Coords w_len = {0.,88.};
+
+ store = node_store_new ();
+ part = part_new ();
+ wire = wire_new ();
+
+ // add one Pin with a offset that is on the wire when rotation N*Pi times
+ Pin *pin = g_new (Pin, 1);
+ pin->offset.x = n_pos.x - p_pos.x;
+ pin->offset.y = n_pos.y - p_pos.y;
+ GSList *list = NULL;
+ list = g_slist_prepend (list, pin);
+ part_set_pins (part, list);
+ g_slist_free (list);
+
+ item_data_set_pos (ITEM_DATA (part), &p_pos);
+
+ item_data_set_pos (ITEM_DATA (wire), &w_pos);
+ wire_set_length (wire, &w_len);
+
+ node_store_add_part (store, part);
+ node_store_add_wire (store, wire);
+
+ {
+ for (i=0; i<11; i++)
+ item_data_rotate (ITEM_DATA (part), 90, NULL);
+ item_data_set_pos (ITEM_DATA (part), &w_len);
+ for (i=0; i<4; i++)
+ item_data_rotate (ITEM_DATA (part), 90, NULL);
+ item_data_set_pos (ITEM_DATA (part), &n_pos);
+ for (i=0; i<7; i++)
+ item_data_rotate (ITEM_DATA (part), -90, NULL);
+ item_data_set_pos (ITEM_DATA (part), &p_pos);
+ }
+ g_assert (node_store_is_wire_at_pos (store, n_pos));
+ g_assert (node_store_is_pin_at_pos (store, n_pos));
+
+ node = node_store_get_node (store, n_pos);
+ g_assert (!node_is_empty (node));
+ g_assert (node_needs_dot (node));
+
+ node_store_remove_part (store, part);
+ node_store_remove_wire (store, wire);
+
+ g_object_unref (store);
+}
+
+#endif
diff --git a/test/test_thread_pipe.c b/test/test_thread_pipe.c
new file mode 100644
index 0000000..3de6a3b
--- /dev/null
+++ b/test/test_thread_pipe.c
@@ -0,0 +1,398 @@
+/*
+ * test_thread_pipe.c
+ *
+ *
+ * Authors:
+ * Michi <st101564@stud.uni-stuttgart.de>
+ *
+ * Web page: https://ahoi.io/project/oregano
+ *
+ *
+ * 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 the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef TEST_THREAD_PIPE_H_
+#define TEST_THREAD_PIPE_H_
+
+#include <string.h>
+#include "../src/tools/thread-pipe.h"
+
+
+typedef struct _GTestAddDataFuncParameters GTestAddDataFuncParameters;
+static gchar *get_testpath_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters);
+static gconstpointer get_test_data_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters);
+static GTestDataFunc get_test_func_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters);
+static GTestAddDataFuncParameters *get_next_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters);
+
+static GTestAddDataFuncParameters *test_thread_pipe_buffered_create_test_data();
+
+/**
+ * Automatically creates some test cases.
+ */
+void add_funcs_test_thread_pipe_buffered() {
+ GTestAddDataFuncParameters *parameters = test_thread_pipe_buffered_create_test_data();
+ while (parameters) {
+ gchar *testpath = get_testpath_g_test_add_data_func_parameters(parameters);
+ gconstpointer test_data = get_test_data_g_test_add_data_func_parameters(parameters);
+ GTestDataFunc test_func = get_test_func_g_test_add_data_func_parameters(parameters);
+ GTestAddDataFuncParameters *next = get_next_g_test_add_data_func_parameters(parameters);
+
+ g_test_add_data_func(testpath, test_data, test_func);
+ GTestAddDataFuncParameters *ptr = parameters;
+ parameters = next;
+ g_free(ptr);
+ }
+}
+
+struct _GTestAddDataFuncParameters {
+ gchar *testpath;
+ gconstpointer test_data;
+ GTestDataFunc test_func;
+ GTestAddDataFuncParameters *next;
+};
+
+/**
+ * getters for GTestAddDataFuncParameters
+ */
+static gchar *get_testpath_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters) { return parameters->testpath; }
+static gconstpointer get_test_data_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters) { return parameters->test_data; }
+static GTestDataFunc get_test_func_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters) { return parameters->test_func; }
+static GTestAddDataFuncParameters *get_next_g_test_add_data_func_parameters(GTestAddDataFuncParameters *parameters) { return parameters->next; }
+
+
+typedef struct _TestThreadPipeBufferedTestData TestThreadPipeBufferedTestData;
+typedef struct _TestThreadPipeBufferedThreadData TestThreadPipeBufferedThreadData;
+typedef struct _TestThreadPipeBufferedData TestThreadPipeBufferedData;
+
+static gchar *test_thread_pipe_buffered_get_testpath(guint *parameter_config, gchar ***parameter_names);
+static TestThreadPipeBufferedTestData *test_thread_pipe_buffered_test_data_new(guint *parameter_config);
+static void test_thread_pipe_buffered_test_func(TestThreadPipeBufferedTestData *test_data);
+static gboolean test_thread_pipe_buffered_variate_parameters(guint *parameter_config, gchar ***parameter_names);
+static guint test_thread_pipe_buffered_ptr_array_length(gpointer *array);
+
+static gpointer test_thread_pipe_buffered_writer(TestThreadPipeBufferedThreadData *pipe_data);
+static gpointer test_thread_pipe_buffered_reader(TestThreadPipeBufferedThreadData *pipe_data);
+static TestThreadPipeBufferedData *test_thread_pipe_buffered_data_new_varargs(const gchar *str, ...);
+static TestThreadPipeBufferedData *test_thread_pipe_buffered_data_new(gchar **str);
+static void test_thread_pipe_buffered_data_assert_equal(TestThreadPipeBufferedData *data1, TestThreadPipeBufferedData* data2);
+
+struct _TestThreadPipeBufferedThreadData {
+ ThreadPipe *pipe;
+ gulong sleep;
+ TestThreadPipeBufferedData *data;
+ ThreadPipe *(*pop)(ThreadPipe *pipe, gpointer *data_out, gsize *size);
+};
+
+struct _TestThreadPipeBufferedTestData {
+ TestThreadPipeBufferedThreadData write_data;
+ TestThreadPipeBufferedThreadData read_data;
+ TestThreadPipeBufferedData *expected;
+};
+
+struct _TestThreadPipeBufferedData {
+ gpointer data;
+ gsize size;
+ TestThreadPipeBufferedData *next;
+};
+
+/**
+ * Creates generic test data out by varying parameters.
+ */
+static GTestAddDataFuncParameters *test_thread_pipe_buffered_create_test_data() {
+ //0 terminated
+ gchar ***parameter_list = g_new0(gchar **, 6);
+ parameter_list[0] = (gchar *[]){"read_write", "write_read", NULL};
+ parameter_list[1] = (gchar *[]){"nowhere", "middle", "end", NULL};
+ parameter_list[2] = (gchar *[]){"first", "not_first", NULL};
+ parameter_list[3] = (gchar *[]){"last", "not_last", NULL};
+ parameter_list[4] = (gchar *[]){"pop", "pop_line", NULL};
+
+ //increase function needs one field more, that's why size+1
+ guint *parameters = g_new0(guint, test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_list) + 1);
+ parameters[1] = test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_list[1]);
+ parameters[2] = test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_list[2]);
+ parameters[3] = test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_list[3]);
+ GTestAddDataFuncParameters *ret_val = NULL;
+ GTestAddDataFuncParameters **walker = &ret_val;
+
+ do {
+ *walker = g_new0(GTestAddDataFuncParameters, 1);
+ (*walker)->testpath = test_thread_pipe_buffered_get_testpath(parameters, parameter_list);
+ (*walker)->test_data = test_thread_pipe_buffered_test_data_new(parameters);
+ (*walker)->test_func = (GTestDataFunc)test_thread_pipe_buffered_test_func;
+ walker = &(*walker)->next;
+ } while (test_thread_pipe_buffered_variate_parameters(parameters, parameter_list));
+
+ return ret_val;
+}
+
+/**
+ * Creates unique test path out of a given parameter specification.
+ */
+static gchar *test_thread_pipe_buffered_get_testpath(guint *parameter_config, gchar ***parameter_names) {
+ GString *ret_val = g_string_new("/tools/thread_pipe_buffered/test");
+
+ for (int i = 0; parameter_names[i] != NULL; i++) {
+ if (parameter_names[i][parameter_config[i]] != NULL) {
+ g_string_append_printf(ret_val, "_%s", parameter_names[i][parameter_config[i]]);
+ }
+ }
+ gchar *ret_val_str = ret_val->str;
+ g_string_free(ret_val, FALSE);
+ return ret_val_str;
+}
+
+/**
+ * Creates generic test data out of a given parameter specification.
+ */
+static TestThreadPipeBufferedTestData *test_thread_pipe_buffered_test_data_new(guint *parameter_config) {
+ TestThreadPipeBufferedTestData *tpipe = g_new0(TestThreadPipeBufferedTestData, 1);
+ ThreadPipe *pipe = thread_pipe_new(0, 0);
+ tpipe->write_data.pipe = pipe;
+ tpipe->read_data.pipe = pipe;
+
+ switch (parameter_config[0]) {
+ case 0:
+ tpipe->write_data.sleep = 10000;
+ break;
+ case 1:
+ tpipe->read_data.sleep = 10000;
+ break;
+ }
+
+ switch (parameter_config[4]) {
+ case 0:
+ tpipe->read_data.pop = thread_pipe_pop;
+ tpipe->write_data.data = test_thread_pipe_buffered_data_new_varargs(
+ "asdf",
+ "jklö",
+ "qwer",
+ "uiop",
+ "yxcv",
+ "m,.-",
+ NULL);
+ tpipe->expected = tpipe->write_data.data;
+ break;
+ case 1:
+ tpipe->read_data.pop = (ThreadPipe *(*)(ThreadPipe *pipe, gpointer *data_out, gsize *size))thread_pipe_pop_line;
+
+ GString *string = g_string_new("asdf");
+ GString *string_all = g_string_new(string->str);
+
+ if (parameter_config[1] == 1) {
+ g_string_append(string, "\nasdf");
+ g_string_append(string_all, "\nasdf");
+ }
+ else if (parameter_config[1] == 2) {
+ g_string_append(string, "\n");
+ g_string_append(string_all, "\n");
+ }
+
+ GList *list_write = NULL;
+ list_write = g_list_append(list_write, string->str);
+ g_string_free(string, FALSE);
+
+ if (parameter_config[2] == 1) {
+ list_write = g_list_prepend(list_write, g_strdup("asdf"));
+ g_string_prepend(string_all, "asdf");
+ }
+
+ if (parameter_config[3] == 1) {
+ list_write = g_list_append(list_write, g_strdup("asdf"));
+ g_string_append(string_all, "asdf");
+ }
+
+ guint length = g_list_length(list_write);
+
+ gchar **str_array = g_new0(gchar *, length + 1);
+ guint i = 0;
+ for (GList *l = list_write; l != NULL; l = l->next, i++)
+ str_array[i] = l->data;
+
+ tpipe->write_data.data = test_thread_pipe_buffered_data_new(str_array);
+
+ gchar **splitted = g_regex_split_simple("\\n", string_all->str, 0, 0);
+ gchar **walker;
+ for (walker = splitted; *(walker + 1) != NULL; walker++)
+ *walker = g_strdup_printf("%s\n", *walker);
+ if (**walker == 0)
+ *walker = NULL;
+
+ tpipe->expected = test_thread_pipe_buffered_data_new(splitted);
+
+ break;
+ }
+
+ return tpipe;
+}
+
+/**
+ * Executes the test with a specified test input data.
+ */
+static void test_thread_pipe_buffered_test_func(TestThreadPipeBufferedTestData *test_data) {
+ GThread *writer = g_thread_new(
+ "test_thread_pipe_buffered_writer",
+ (GThreadFunc)test_thread_pipe_buffered_writer,
+ (gpointer)(&test_data->write_data));
+ GThread *reader = g_thread_new(
+ "test_thread_pipe_buffered_reader",
+ (GThreadFunc)test_thread_pipe_buffered_reader,
+ (gpointer)(&test_data->read_data));
+
+ g_thread_join(writer);
+ g_thread_join(reader);
+
+ test_thread_pipe_buffered_data_assert_equal(test_data->expected, test_data->read_data.data);
+}
+
+/**
+ * varies the input parameter configuration differentially
+ */
+static gboolean test_thread_pipe_buffered_variate_parameters(guint *parameter_config, gchar ***parameter_names) {
+ guint parameter_names_length = test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_names);
+ parameter_config[0]++;
+ for (int i = 0; i < parameter_names_length; i++) {
+ if (parameter_config[i] >= test_thread_pipe_buffered_ptr_array_length((gpointer *)parameter_names[i])) {
+ parameter_config[i] = 0;
+ parameter_config[i + 1]++;
+ } else
+ break;
+ }
+// if (parameter_config[1] == 1 && parameter_config[4] == 0) {
+// parameter_config[1] = 0;
+// parameter_config[4]++;
+// }
+
+ return !parameter_config[parameter_names_length];
+}
+
+/**
+ * get the length of a 0 terminated pointer array
+ */
+static guint test_thread_pipe_buffered_ptr_array_length(gpointer *array) {
+ guint ret_val = 0;
+
+ while (array[ret_val])
+ ret_val++;
+
+ return ret_val;
+}
+
+/**
+ * writes to the pushing end of a thread pipe
+ */
+static gpointer test_thread_pipe_buffered_writer(TestThreadPipeBufferedThreadData *pipe_data) {
+ TestThreadPipeBufferedData *walker = pipe_data->data;
+ while (walker) {
+ g_usleep(pipe_data->sleep);
+ thread_pipe_push(pipe_data->pipe, walker->data, walker->size);
+ walker = walker->next;
+ }
+ thread_pipe_set_write_eof(pipe_data->pipe);
+
+ return NULL;
+}
+
+/**
+ * reads the popping end of a thread pipe
+ */
+static gpointer test_thread_pipe_buffered_reader(TestThreadPipeBufferedThreadData *pipe_data) {
+ gpointer data;
+ gsize size;
+ TestThreadPipeBufferedData **walker = &pipe_data->data;
+ while (pipe_data->pop(pipe_data->pipe, &data, &size)) {
+ *walker = g_new0(TestThreadPipeBufferedData, 1);
+ (*walker)->data = g_memdup(data, size);
+ (*walker)->size = size;
+ walker = &(*walker)->next;
+ g_usleep(pipe_data->sleep);
+// puts(data);
+ }
+
+ return NULL;
+}
+
+/**
+ * Creates a new TestThreadPipeBufferedData struct out of an array string list.
+ *
+ * The list has to be 0 terminated.
+ */
+static TestThreadPipeBufferedData *test_thread_pipe_buffered_data_new(gchar **str) {
+ TestThreadPipeBufferedData *ret_val = NULL;
+ TestThreadPipeBufferedData **walker = &ret_val;
+ for (int i = 0; str[i] != NULL; i++) {
+ *walker = g_new0(TestThreadPipeBufferedData, 1);
+ (*walker)->data = g_strdup(str[i]);
+ (*walker)->size = strlen(str[i]) + 1;
+ walker = &(*walker)->next;
+ }
+
+ return ret_val;
+}
+
+/**
+ * Creates a new TestThreadPipeBufferedData struct out of a vararg string list.
+ *
+ * The list has to be 0 terminated.
+ */
+static TestThreadPipeBufferedData *test_thread_pipe_buffered_data_new_varargs(const gchar *str, ...) {
+
+ va_list ptr;
+ va_start(ptr, str);
+
+ gchar **str_array;
+ size_t size;
+ FILE *file = open_memstream((char **)&str_array, &size);
+
+ const gchar *asdf = str;
+ while (asdf) {
+ fwrite(&asdf, sizeof(const gchar *), 1, file);
+ asdf = va_arg(ptr, const gchar *);
+ }
+ fwrite(&asdf, sizeof(const gchar *), 1, file);
+
+ fclose(file);
+
+ TestThreadPipeBufferedData *ret_val = test_thread_pipe_buffered_data_new(str_array);
+ g_free(str_array);
+
+ return ret_val;
+}
+
+/**
+ * Looks for equality of two TestThreadPipeBufferedData structs.
+ *
+ * Two structs are equal if
+ * - size of each block is equal and
+ * - data of each block is equal.
+ */
+static void test_thread_pipe_buffered_data_assert_equal(TestThreadPipeBufferedData *data1, TestThreadPipeBufferedData* data2) {
+ TestThreadPipeBufferedData *walker1 = data1;
+ TestThreadPipeBufferedData *walker2 = data2;
+
+ while (walker1 && walker2) {
+ g_assert_cmpuint(walker1->size, ==, walker2->size);
+ g_assert_cmpmem(walker1->data, walker1->size, walker2->data, walker2->size);
+ walker1 = walker1->next;
+ walker2 = walker2->next;
+ }
+
+ g_assert_true(walker1 == NULL);
+ g_assert_true(walker2 == NULL);
+
+}
+
+#endif /* TEST_THREAD_PIPE_H_ */
diff --git a/test/test_update_connection_designators.c b/test/test_update_connection_designators.c
new file mode 100644
index 0000000..4d01020
--- /dev/null
+++ b/test/test_update_connection_designators.c
@@ -0,0 +1,315 @@
+/*
+ * test_update_schematic.c
+ *
+ *
+ * Authors:
+ * Michi <st101564@stud.uni-stuttgart.de>
+ *
+ * Web page: https://ahoi.io/project/oregano
+ *
+ *
+ * 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 the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef TEST_UPDATE_CONNECTION_DESIGNATORS
+#define TEST_UPDATE_CONNECTION_DESIGNATORS
+
+#include <glib.h>
+
+#include "../src/model/part-property.h"
+#include "../src/model/part.h"
+#include "../src/model/part-private.h"
+
+void test_update_connection_designators_basic();
+void test_update_connection_designators_AT();
+void test_update_connection_designators_AMPERSAND_TRUE();
+void test_update_connection_designators_AMPERSAND_FALSE();
+void test_update_connection_designators_QUESTION_MARK_TRUE();
+void test_update_connection_designators_QUESTION_MARK_FALSE();
+void test_update_connection_designators_TILDE_TRUE();
+void test_update_connection_designators_TILDE_FALSE();
+void test_update_connection_designators_HASHTAG_TRUE();
+void test_update_connection_designators_HASHTAG_FALSE();
+void doit_update_connection_designators(char *names[], char *test_values[], char *expected_values[]);
+
+void
+add_funcs_test_update_connection_designators()
+{
+ g_test_add_func ("/core/model/part-property/update_connection_designators/basic", test_update_connection_designators_basic);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/AT", test_update_connection_designators_AT);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/AMPERSAND_TRUE", test_update_connection_designators_AMPERSAND_TRUE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/AMPERSAND_FALSE", test_update_connection_designators_AMPERSAND_FALSE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/QUESTION_MARK_TRUE", test_update_connection_designators_QUESTION_MARK_TRUE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/QUESTION_MARK_FALSE", test_update_connection_designators_QUESTION_MARK_FALSE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/TILDE_TRUE", test_update_connection_designators_TILDE_TRUE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/TILDE_FALSE", test_update_connection_designators_TILDE_FALSE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/HASHTAG_TRUE", test_update_connection_designators_HASHTAG_TRUE);
+ g_test_add_func ("/core/model/part-property/update_connection_designators/HASHTAG_FALSE", test_update_connection_designators_HASHTAG_FALSE);
+}
+
+void test_update_connection_designators_basic() {
+ char *names[] = {
+ "Refdes",
+ "Res",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "R1",
+ "1k",
+ "@refdes %asdf %asdf @res",
+ NULL };
+ char *expected_values[] = {
+ "R1",
+ "1k",
+ "@refdes %1 %2 @res",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_AT() {
+ char *names[] = {
+ "Refdes",
+ "cur",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "G1",
+ "'0.001*(V( %+i )-V( %-i ))'",
+ "@refdes %a %b cur=@cur",
+ NULL };
+ char *expected_values[] = {
+ "G1",
+ "'0.001*(V( %3 )-V( %4 ))'",
+ "@refdes %1 %2 cur=@cur",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_AMPERSAND_TRUE() {
+ char *names[] = {
+ "Refdes",
+ "mname",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "RMOD",
+ "RMODEL %adsf jkloe",
+ "@refdes %a %b &mname %asdf ",
+ NULL };
+ char *expected_values[] = {
+ "RMOD",
+ "RMODEL %3 jkloe",
+ "@refdes %1 %2 &mname %4 ",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_AMPERSAND_FALSE() {
+ char *names[] = {
+ "Refdes",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "RMOD",
+ "@refdes %a %b &mname %asdf ",
+ NULL };
+ char *expected_values[] = {
+ "RMOD",
+ "@refdes %1 %2 &mname %3 ",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_QUESTION_MARK_TRUE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "DC",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "555",
+ "5555 %34 asdf",
+ "@refdes %qtg %sd SIN(@offset 0 0) ?DC|DC @DC %agoi |(ampl @ampl %agoi ( ?DC|freq @freq %agoi |",
+ NULL };
+ char *expected_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "555",
+ "5555 %3 asdf",
+ "@refdes %1 %2 SIN(@offset 0 0) ?DC|DC @DC %4 |(ampl @ampl %agoi ( ?DC|freq @freq %5 |",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_QUESTION_MARK_FALSE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "555",
+ "@refdes %qtg %sd SIN(@offset 0 0) ?DC|DC @DC %agoi |(ampl @ampl %agoi ( %-gh ?DC|freq @freq %agoi | %-gh ",
+ NULL };
+ char *expected_values[] = {
+ "V1",
+ "5",
+ "5555 %3 asdf",
+ "555",
+ "@refdes %1 %2 SIN(@offset 0 0) ?DC|DC @DC %agoi |(ampl @ampl %4 ( %5 ?DC|freq @freq %agoi | %6 ",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_TILDE_TRUE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "DC",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "5555 %34 freq",
+ "5555 %34 asdf",
+ "@refdes %qtg %sd SIN(@offset 0 0) ~DC|ampl %lkj @ampl|(DC %lkj @DC( ~DC|freq %lkj @freq|",
+ NULL };
+ char *expected_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "5555 %34 freq",
+ "5555 %4 asdf",
+ "@refdes %1 %2 SIN(@offset 0 0) ~DC|ampl %lkj @ampl|(DC %3 @DC( ~DC|freq %lkj @freq|",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_TILDE_FALSE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "V1",
+ "5",
+ "5555 %34 asdf",
+ "5555 %34 freq",
+ "@refdes %qtg %sd SIN(@offset 0 0) ~DC|freq %lkj @freq| ~DC|ampl %lkj @ampl|(DC %lkj @DC( %-gh ",
+ NULL };
+ char *expected_values[] = {
+ "V1",
+ "5",
+ "5555 %6 asdf",
+ "5555 %4 freq",
+ "@refdes %1 %2 SIN(@offset 0 0) ~DC|freq %3 @freq| ~DC|ampl %5 @ampl|(DC %lkj @DC( %7 ",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_HASHTAG_TRUE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "DC",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "V1",
+ "5",
+ "55",
+ "555",
+ "5555 %34 asdf",
+ "@refdes %qtg %sd SIN(@offset @ampl @freq 0 0) #DC|DC %wfl @DC %wfl | aslkhgl %jkl ",
+ NULL };
+ char *expected_values[] = {
+ "V1",
+ "5",
+ "55",
+ "555",
+ "5555 %4 asdf",
+ "@refdes %1 %2 SIN(@offset @ampl @freq 0 0) #DC|DC %3 @DC %5 | aslkhgl %6 ",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+void test_update_connection_designators_HASHTAG_FALSE() {
+ char *names[] = {
+ "Refdes",
+ "offset",
+ "ampl",
+ "freq",
+ "Template",
+ NULL };
+ char *test_values[] = {
+ "RMOD",
+ "5",
+ "5555 %34 asdf",
+ "555",
+ "@refdes %qtg %sd SIN(@offset @freq 0 0) #DC|DC %jkl @ampl %wfl | %-gh jkl",
+ NULL };
+ char *expected_values[] = {
+ "RMOD",
+ "5",
+ "5555 %34 asdf",
+ "555",
+ "@refdes %1 %2 SIN(@offset @freq 0 0) #DC|DC %jkl @ampl %wfl | %-gh jkl",
+ NULL };
+ doit_update_connection_designators(names, test_values, expected_values);
+}
+
+//this function does not free the allocated memory
+//do not use this function in productive code
+void doit_update_connection_designators(char *names[], char *test_values[], char *expected_values[]) {
+ Part *test_part = part_new();
+
+ Property *prop;
+
+ for (int i = 0; names[i] != NULL; i++) {
+ prop = g_new0 (Property, 1);
+ prop->name = g_strdup(names[i]);
+ prop->value = g_strdup(test_values[i]);
+ test_part->priv->properties = g_slist_prepend(test_part->priv->properties, prop);
+ }
+
+ int node_ctr = 1;
+ update_connection_designators(test_part, part_get_property_ref(test_part, "template"), &node_ctr);
+ for (int i = 0; names[i] != NULL; i++)
+ g_assert_cmpstr(part_get_property(test_part, names[i]), ==, expected_values[i]);
+}
+
+#endif
diff --git a/test/test_wire.c b/test/test_wire.c
new file mode 100644
index 0000000..ddbeee7
--- /dev/null
+++ b/test/test_wire.c
@@ -0,0 +1,99 @@
+#ifndef TEST_WIRE_H
+#define TEST_WIRE_H
+
+#include <glib.h>
+
+#include "coords.h"
+#include "wire.h"
+
+void
+test_coords ()
+{
+ const Coords l1 = {-100.,+100.};
+ const Coords l2 = {+100.,+100.};
+ Coords tmp;
+
+ g_assert_cmpfloat (coords_cross (&l1, &l2), ==, -2e+4);
+
+ g_assert_cmpfloat (coords_dot (&l1,&l2), ==, 0.);
+
+ tmp = coords_average (&l1,&l2);
+ g_assert_cmpfloat (tmp.x, ==, 0.);
+ g_assert_cmpfloat (tmp.y, ==, 100.);
+
+ g_assert_cmpfloat (coords_euclid (&l1), ==, coords_euclid (&l2));
+
+ tmp = coords_sum (&l1, &l2);
+ g_assert_cmpfloat (tmp.x, ==, 0.);
+ g_assert_cmpfloat (tmp.y, ==, 200.);
+}
+
+#define NODE_EPSILON 1e-3
+#include "node-store.h"
+
+void
+test_wire_intersection ()
+{
+ extern gboolean do_wires_intersect (Wire *a, Wire *b, Coords *where);
+ // intersection
+ Coords p1 = {100.,0.};
+ Coords l1 = {-100.,100.};
+ Coords p2 = {0.,0.};
+ Coords l2 = {100.,100.};
+ Coords where = {-77777.77,-77.7777};
+ const Coords expected = {50.0,50.0};
+
+ Wire *a = wire_new (NULL);
+ Wire *b = wire_new (NULL);
+
+ item_data_set_pos (ITEM_DATA (a), &p1);
+ wire_set_length (a, &l1);
+ item_data_set_pos (ITEM_DATA (b), &p2);
+ wire_set_length (b, &l2);
+
+ g_assert (do_wires_intersect (a,b,&where));
+ g_assert (coords_equal (&where, &expected));
+
+ g_object_unref (a);
+ g_object_unref (b);
+
+}
+
+
+void
+test_wire_tcrossing ()
+{
+ extern gboolean is_t_crossing (Wire *a, Wire *b, Coords *t);
+ // t crossing
+ Coords p1 = {50.,0.};
+ Coords l1 = {0., 100.};
+ Coords p2 = {0.,0.};
+ Coords l2 = {100.,0.};
+ Coords where = {-77.77,-77.77};
+ const Coords expected = p1;
+
+ Wire *a = wire_new (NULL);
+ Wire *b = wire_new (NULL);
+
+ {
+ item_data_set_pos (ITEM_DATA (a), &p1);
+ wire_set_length (a, &l1);
+ item_data_set_pos (ITEM_DATA (b), &p2);
+ wire_set_length (b, &l2);
+
+ g_assert (is_t_crossing (a, b, &where));
+ g_assert (coords_equal (&where, &expected));
+ }
+
+ {
+ item_data_set_pos (ITEM_DATA (a), &p1);
+ wire_set_length (a, &l2);
+ item_data_set_pos (ITEM_DATA (b), &p2);
+ wire_set_length (b, &l1);
+
+ g_assert (!is_t_crossing (a, b, &where));
+ }
+ g_object_unref (a);
+ g_object_unref (b);
+}
+#endif
diff --git a/test/wscript b/test/wscript
new file mode 100644
index 0000000..1b1dece
--- /dev/null
+++ b/test/wscript
@@ -0,0 +1,18 @@
+#! /usr/bin/env python3
+# encoding: utf-8
+
+def options(opt):
+ pass
+
+def configure(conf):
+ pass
+
+def build(bld):
+ bld.program(
+ features = ['c', 'glib2'],
+ target = 'microtests',
+ source = ['test.c'],
+ includes = ['.', '../src', '../src/tools/', '../src/engines/', '../src/gplot/', '../src/model/', '../src/sheet/'],
+ use = 'shared_objects',
+ uselib = 'M XML GOBJECT GLIB GTK3 XML GOOCANVAS GTKSOURCEVIEW3'
+ )