tla2dot 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 355e281670cfc51d37cfc795e160ba73e3977c11
4
+ data.tar.gz: 3432ad2922ea1f5db216fa66c4d12cea75a9ee52
5
+ SHA512:
6
+ metadata.gz: ed786e9c8da322f234935eeb761d7b7d4f654db37285f5ca6447528fd1e9e2093d0f575928dbd2c5cba40b06025759a098bb353dd000044f3c1e24d3a02a2793
7
+ data.tar.gz: 82990ce4e46ef527a7e23bc8369b7817812ae690d27a42e7f5252135ca6f3efcfcbc39fb04e0e19313d1e6407f810fc777ca1979210422b4559d4b0c74f610f9
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ <link href="../site.css" rel="stylesheet"></link>
2
+ [Up](../index.php) [Readme](README.html) [Releases](RELEASES.html) [Todo](TODO.html)
3
+
4
+
5
+ # tladot - Utility to convert tlc/tlaplus state space to graphviz - $Release:0.0.3$
6
+
7
+ A utility to convert state space dump created by [patched](https://gist.github.com/4359ee94e58d25817a95) TLC tool in
8
+ [TLA toolbox](http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html)
9
+ of
10
+ [tlaplus](http://research.microsoft.com/en-us/um/people/lamport/tla/tla.html)
11
+ to [graphviz](www.graphviz.org) dot format.
12
+
13
+
14
+ ## Usage
15
+
16
+ ## Obtain the patched TLC version
17
+
18
+ Clone github model
19
+
20
+
21
+ https://github.com/jarjuk/tla2dot
22
+
23
+ and change the working directory
24
+
25
+ cd tla2dot
26
+
27
+ ### Running the patced TLC version to create state dump
28
+
29
+ Create a TLA model in directory `model` 'in files `setup.tla`,
30
+ `setup.cfg`, and `model.tla`
31
+
32
+ Set up environment CP to poinnt the patched tla2tools.jar in directory java
33
+
34
+ export CP=$(pwd)/java/org.lamport.tlatools-1.0.1-SNAPSHOT.jar
35
+
36
+ Create a `../examples/customer1-patched.dump setup` for the TLA model using the command
37
+
38
+ (cd model; java -cp $CP tlc2.TLC -dump ../examples/customer1-patched.dump setup)
39
+
40
+ The [patch](https://gist.github.com/4359ee94e58d25817a95) adds fingerprint
41
+ and transition information to the dump file created using [`-dump` option](http://research.microsoft.com/en-us/um/people/lamport/tla/current-tools.pdf).
42
+
43
+
44
+ For example, difference of [non-patched dump file](examples/customer1-orig.dump), and
45
+ the [patched dump file](examples/customer1-patched.dump) for a TLA model may show
46
+
47
+ ```
48
+ 1c1
49
+ < State 1:
50
+ ---
51
+ > State 1/-2710668386619955114:
52
+ 25c25
53
+ < State 2:
54
+ ---
55
+ > State 2/-2906287262858016143:
56
+ 60c60,62
57
+ < State 3:
58
+ ---
59
+ > Transition -2710668386619955114 --> -2906287262858016143
60
+ >
61
+ > State 3/-5306425081709262628:
62
+ 84c86,88
63
+ < State 4:
64
+ ---
65
+ > Transition -2906287262858016143 --> -5306425081709262628
66
+ >
67
+ > State 4/3141097224850855796:
68
+ 95a100,103
69
+ >
70
+ > Transition -5306425081709262628 --> 3141097224850855796
71
+ >
72
+ > Transition 3141097224850855796 --> 3141097224850855796
73
+ ```
74
+
75
+ ### Create dot file
76
+
77
+ To create a dot file for a patched state-dump in `examples/customer1-patched.dump` run
78
+
79
+ bin/tla2dot.rb graph examples/customer1-patched.dump >tmp/dump.dot
80
+
81
+ and to convert it to a graph
82
+
83
+ dot -T svg tmp/dump.dot >tmp/dump.svg
84
+
85
+ Command `graph` takes in a list of variables to include in state
86
+ nodes. For example, in the example model show variables `now,step` use the command
87
+
88
+ bin/tla2dot.rb graph examples/customer1-patched.dump now,step >tmp/dump.dot
89
+
90
+ State identity is referenced using variable name `ID`.
91
+
92
+
93
+ bin/tla2dot.rb graph examples/customer1-patched.dump ID,now,step >tmp/dump.dot
94
+
95
+ and all variables can be show using value `TRUE`
96
+
97
+ bin/tla2dot.rb graph examples/customer1-patched.dump TRUE >tmp/dump.dot
98
+
99
+
100
+
101
+ ## <a id="INSTALLATION">Installation</a>
102
+
103
+ Add following lines to `Gemfile`
104
+
105
+ source 'https://rubygems.org'
106
+ gem 'tla2dot'
107
+
108
+ and to get help on using tla2tools
109
+
110
+ bundle exec tla2dot.rb help
111
+
112
+
113
+ ## Development
114
+
115
+ See [RELEASES](RELEASES.md)
116
+
117
+
118
+ ## License
119
+
120
+ MIT
121
+
122
+
123
+
124
+
125
+
data/bin/tla2dot.rb ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/cli/cli.rb"
4
+
5
+ TLA2DOT::Cli.start
data/lib/cli/cli.rb ADDED
@@ -0,0 +1,114 @@
1
+
2
+ require 'thor'
3
+ require_relative '../tla2dot'
4
+
5
+ module TLA2DOT
6
+
7
+ class Cli < Thor
8
+
9
+
10
+ include TLA2DOT::Utils::MyLogger # mix logger
11
+ PROGNAME = "main" # logger progname
12
+
13
+ TEMPLATES= [ "mustache/" ] # default locations for templates
14
+ DEAFAULT_TEMPLATE="root" # default starting point for template rendering
15
+
16
+
17
+ # ------------------------------------------------------------------
18
+ # make two thor tasks share options?
19
+ # http://stackoverflow.com/questions/14346285/how-to-make-two-thor-tasks-share-options
20
+
21
+ class << self
22
+ def add_shared_option(name, options = {})
23
+ @shared_options = {} if @shared_options.nil?
24
+ @shared_options[name] = options
25
+ end
26
+
27
+ def shared_options(*option_names)
28
+ option_names.each do |option_name|
29
+ opt = @shared_options[option_name]
30
+ raise "Tried to access shared option '#{option_name}' but it was not previously defined" if opt.nil?
31
+ option option_name, opt
32
+ end
33
+ end
34
+ end
35
+
36
+ def initialize(*args)
37
+ super
38
+ @logger = getLogger( PROGNAME, options )
39
+ end
40
+
41
+ # ------------------------------------------------------------------
42
+
43
+ class_option :log, :aliases => "-l", :type =>:string, :default => nil,
44
+ :enum => [ "DEBUG", "INFO", "WARN", "ERROR" ],
45
+ :desc => "Set debug level "
46
+
47
+ class_option :log_file, :type =>:string, :default => "tla2dot.log",
48
+ :desc => "Set file for log output"
49
+
50
+ # ------------------------------------------------------------------
51
+ # shared options
52
+
53
+ add_shared_option :templates,
54
+ :aliases => "-t",
55
+ :type => :array,
56
+ :default => TEMPLATES,
57
+ :desc => "Array of directory paths (ending with slash '/' char e.g. 'mustache/') of Gem names (optionally with version constraint e.g. 'tla2dot,~>0.0.1') holding mustache templates"
58
+
59
+
60
+
61
+ # ------------------------------------------------------------------
62
+ # actionp 'test'
63
+ desc :test, "demo remove"
64
+ def test()
65
+ puts "testing works"
66
+ end
67
+
68
+ # ------------------------------------------------------------------
69
+ # action 'graph'
70
+
71
+ desc "graph <state-dump> <variables>", "Create graph for <state-dump> showing variables"
72
+
73
+ long_desc <<-LONGDESC
74
+
75
+ <variables> : TRUE => show all variables
76
+ FALSE => show no variables
77
+ comma-serated-list => show variables, special value ID shows
78
+ node identifier
79
+ LONGDESC
80
+
81
+
82
+ shared_options :templates
83
+
84
+ def graph( state_dump, variables=[] )
85
+ @logger.info( "#{__method__} starting" )
86
+
87
+ @logger.debug( "#{__method__} variables=#{variables}" )
88
+ if ( variables == "TRUE" )
89
+ variables = true
90
+ elsif ( variables == "FALSE" )
91
+ variables = false
92
+ elsif variables.kind_of?( String )
93
+ variables = variables.split( "," )
94
+ end
95
+
96
+ # Read files && parse to graph
97
+ dump_lines = File.readlines( state_dump ).each{ |l| l.chomp! }
98
+ graph = Tla2DotParser.new( options ).parse( dump_lines, variables )
99
+ @logger.info( "#{__method__} parsed #{graph.nodes.size} nodes" )
100
+
101
+
102
+ # Cretae dot source
103
+ template_file = DEAFAULT_TEMPLATE
104
+ dot_source = TLA2DOT::Template.new( options ).to_str( template_file, graph )
105
+
106
+ # Ouptut dot source to stdout
107
+ puts dot_source
108
+
109
+ end
110
+
111
+
112
+ end # class Thor
113
+
114
+ end