From bddca67fadfa7b947beb74b19cf9f337ec4d09d3 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Mon, 31 Jul 2023 09:54:54 +0300 Subject: [PATCH] #5 clean --- .github/workflows/rake.yml | 1 + fixtures/sum.dfg | 6 ++++-- lib/damsi/dfg.rb | 18 +++++++++++------- lib/damsi/ticks.rb | 2 +- test/test_dfg.rb | 10 ++++++---- test/test_tex.rb | 4 ++-- test/tex.rb | 2 +- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/.github/workflows/rake.yml b/.github/workflows/rake.yml index 4d3e31d..bcb781b 100644 --- a/.github/workflows/rake.yml +++ b/.github/workflows/rake.yml @@ -16,6 +16,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 + - uses: teatimeguest/setup-texlive-action@v2.5.1 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} diff --git a/fixtures/sum.dfg b/fixtures/sum.dfg index 74ce429..50eb2e9 100644 --- a/fixtures/sum.dfg +++ b/fixtures/sum.dfg @@ -1,5 +1,7 @@ -send :sum, a:10 -send :sum, b:15 +recv :start do + send :sum, a:10 + send :sum, b:15 +end recv :sum do |a, b| send :mul, x: (a+b) end diff --git a/lib/damsi/dfg.rb b/lib/damsi/dfg.rb index 2fa5e5e..5f2d358 100644 --- a/lib/damsi/dfg.rb +++ b/lib/damsi/dfg.rb @@ -29,6 +29,8 @@ def initialize(prog) @prog = prog @cells = {} @ops = {} + @ticks = Damsi::Ticks.new + @tick = 0 end def cell(vtx) @@ -37,7 +39,10 @@ def cell(vtx) def send(vtx, args) @cells[vtx] = {} if @cells[vtx].nil? - args.each { |k, a| @cells[vtx][k] = a } + args.each do |k, a| + @cells[vtx][k] = a + @ticks.push(@tick, "\\texttt{#{a}} $\\to$ \\texttt{#{vtx}\\textbar{}1.#{k}}") + end end def recv(vtx, &block) @@ -49,8 +54,7 @@ def simulate(log) # rubocop:disable Security/Eval eval(@prog) # rubocop:enable Security/Eval - ticks = Damsi::Ticks.new - tick = 0 + send(:start, {}) loop do execs = 0 before = @cells.clone @@ -61,14 +65,14 @@ def simulate(log) args = reqs.map { |p| c[p[1]] }.compact next if args.size < reqs.size blk.call(*args) - log.debug("#{tick}: #{v} called with #{args}") + log.debug("#{@tick}: #{v} called with #{args}") execs += 1 @cells.delete(v) end break if execs.zero? - tick += 1 - raise 'Ran out of ticks' if tick > 100 + @tick += 1 + raise 'Ran out of ticks' if @tick > 100 end - ticks + @ticks end end diff --git a/lib/damsi/ticks.rb b/lib/damsi/ticks.rb index 3d33623..575874a 100644 --- a/lib/damsi/ticks.rb +++ b/lib/damsi/ticks.rb @@ -40,7 +40,7 @@ def to_latex(log) end log.info("\\begin{tabular}{#{'l' * total}}") pos = 0 - @ticks.each do |n, t| + @ticks.each do |_n, t| log.info("#{'&' * pos} \\multicolumn{#{total - pos}}{l}{\\begin{tabular}{|l}") t.each do |e| log.info(e) diff --git a/test/test_dfg.rb b/test/test_dfg.rb index f32c6a8..a967327 100644 --- a/test/test_dfg.rb +++ b/test/test_dfg.rb @@ -32,18 +32,20 @@ class TestDFG < Minitest::Test def test_primitive_summator dfg = Damsi::DFG.new( ' - send :sum, a:10 - send :sum, b:15 + recv :start do + send :sum, a:10 + send :sum, b:15 + end recv :sum do |a, b| send :mul, x: (a+b) end recv :mul do |x| - send :out, x: x + send :stop, x: x end ' ) ticks = dfg.simulate(Loog::NULL) - assert_equal(25, dfg.cell(:out)[:x]) + assert_equal(25, dfg.cell(:stop)[:x]) tex = TeX.new ticks.to_latex(tex) tex.to_pdf(path: '/tmp/damsi.pdf') diff --git a/test/test_tex.rb b/test/test_tex.rb index ac1654f..61b48a7 100644 --- a/test/test_tex.rb +++ b/test/test_tex.rb @@ -28,8 +28,8 @@ class TestTeX < Minitest::Test def test_primitive_document tex = TeX.new - tex.info("Hello, world!") - tex.info("Hello, \\LaTeX!") + tex.info('Hello, world!') + tex.info('Hello, \\LaTeX!') Dir.mktmpdir do |dir| pdf = File.join(dir, 'a.pdf') tex.to_pdf(path: pdf) diff --git a/test/tex.rb b/test/tex.rb index 2385607..526ac48 100644 --- a/test/tex.rb +++ b/test/tex.rb @@ -30,7 +30,7 @@ def to_pdf(path: '/tmp/damsi.pdf') Dir.mktmpdir do |dir| name = 'paper.tex' tex = File.join(dir, name) - body = "\\documentclass{article}\\begin{document}#{to_s}\\end{document}" + body = "\\documentclass{article}\\usepackage[T1]{fontenc}\\begin{document}#{self}\\end{document}" File.write(tex, body) cmd = "set -x && cd #{dir} && ls -al && pdflatex -shell-escape -halt-on-error #{name} 2>&1" system(cmd)